fobj = open -> fuktioniert nicht

#1
Hallo!

Habe mir gerade Python installiert, um meine vielen ASCII Dateien, bzw Textdateien schneller auswerten zu können. Zu diesem Zweck wollte ich meine Datei einlesen, aber es funktioniert nicht:

Python:
>>> fobj = open("Dokument.txt", "r")
        
Traceback (most recent call last):
  File "<pyshell#24>", line 1, in <module>
    fobj = open("Dokument.txt", "r")
FileNotFoundError: [Errno 2] No such file or directory: 'Dokument.txt'
>>> fobj = open("C:\Users\User\Desktop\praktikum\Daten\CV\Dokument.txt","r")
        
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape
>>>
Der Python code befindet sich im selben Ordner wie die Datei, aber auch mit dem Pdaf funktioniert nicht. Muss ich vor dem fobj=open bBefehl etwas importieren oder laden? Weil ich dachte, dass fobj reichen müsste....
 

-AB-

R.I.P.
c-b Team
c-b Experte
#2
Muss ich vor dem fobj=open bBefehl etwas importieren oder laden?
Die Fehlermeldung sagt dir ja schon, dass er versucht, eine Datei zu laden.
Ansonsten bekämst du etwas wie "Das Symbol wurde nicht gefunden" oder "open() ist nicht definiert", etc.

Weil ich dachte, dass fobj reichen müsste....
Das ist lediglich dein Variablenname. Der kann sein was immer du willst (in Grenzen), Python nutzt den Namen nicht, um daraus irgendeine Semantik abzuleiten.

Eigentlich ist Windows das Problem :) Unter Windows werden Verzeichnisse ja mit einem Backslash getrennt (\) - dieser wird aber in den meisten Programmiersprachen als "Escaping"-Zeichen verwendet: Was danach kommt, wird besonders behandelt.
Sprich, dein String, den du übergibst, passt nicht. Zumindest nicht der mit dem vollen Pfad: hier könntest du Python sagen, den String bitte *nicht* zu verändern, nur weil Backslashes drinstehen, das geht so: fobj = open(r"C:\Users\User\Desktop\praktikum\Daten\CV\Dokument.txt","r") (oder jeden Backslash nochmal escapen.)

Der Python code befindet sich im selben Ordner wie die Datei
Und in welchem Verzeichnis hast du Python aufgerufen? Wenn du in Daten\ bist, und python CV\meinScript.py aufrufst, wird weiter schön in Daten\ gesucht.
 

Dompteur

Well-Known Member
#3
Um dein aktuelles Arbeitsverzeichnis zu sehen, kannst du folgendes eingeben:
Code:
print (os.getcwd())
Beim voll qualifizierten Pfad hast du neben den Möglichkeiten, die -AB- genannt hat, auch die Möglichkeiten das Slash-Zeichen ("/") statt dem Backslash ("\") zu verwenden. Also:
Code:
fobj = open("C:/Users/User/Desktop/praktikum/Daten/CV/Dokument.txt","r")[ICODE]
 
#4
das geht so: fobj = open(r"C:\Users\User\Desktop\praktikum\Daten\CV\Dokument.txt","r")
Somit bekomme ich zumindest keine Fehlermeldung mehr, aber dafür:

Python:
RESTART: C:\Users\User\Desktop\praktikum\Daten\CV\test1.py
Ich habe das Programm test1 geschlossen und nochmal neu geöffnet, allerdings bekomme ich die selbe Meldung. Die gewünschte Textdatei wurde immernoch nicht geöffnet :(


Python:
>>> print (os.getcwd())
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    print (os.getcwd())
NameError: name 'os' is not defined
Das hat sich erledigt, habe davor noch:

Python:
import os, sys
geschrieben
 
Zuletzt bearbeitet:

Dompteur

Well-Known Member
#5
Wie sieht denn dein test1.py aus ? Und poste bitte wieder die genaue Fehlermeldung.

Bei
Code:
fobj = open(r"C:\Users\User\Desktop\praktikum\Daten\CV\Dokument.txt","r")
könnten die "\U..." dazu führen, dass Python das als Unicode-Sequenz interpretiert. Das wird, wenn ich mich recht erinnere, auch bei r" nicht als Raw-Text genommen.
 
#6
mein test1.py besteht nur aus einer Zeile:

Python:
fobj = open(r"C:\Users\User\Desktop\praktikum\Daten\CV\Dokument.txt","r")
Das einzige, was ich als antwort erhalte ist:


Python:
>>>
RESTART: C:\Users\User\Desktop\praktikum\Daten\CV\test1.py
>>>
Ich habe noch etwas anderes probiert:

Python:
with open("Dokument.txt") as f:
    for line in f:
        print(line)
Angenommen, fobj würde funktionieren, wäre das Ergebnis das selbe wie das Öffnen mit with?
 

Dompteur

Well-Known Member
#7
Bei test1.py öffnest du eine Datei. Sonst machst du ja nichts. Daher gibt es auch keine Ausgabe.
Häng einmal folgendes an:

Code:
text = fobj.read()
print (text)
 
Gefällt mir: Spin
#8
Ja! Das hat funkioniert :D

Aber gibt es auch eine Möglichkeit, die Textdatei nicht nur i Shell sondern wirklich als Textdatei in einem separaten Fenster zu öffnen?
 

Dompteur

Well-Known Member
#9
Üblicherweise verwendet man ja Python zum Bearbeiten der Inhalte von Dateien. Aber, wenn du die Datei nur in einem Editor aufmachen möchtest, geht das so:
Code:
import os
fileName = r"C:\Users\User\Desktop\praktikum\Daten\CV\Dokument.txt"
os.startfile(fileName)
Dann wird jenes Programm gestartet, das mit der Fileextention verknüpft ist.
 
Oben