Seite 1 von 1
Anfängerfrage: Datei aus Liste öffnen
Verfasst: Donnerstag 11. Dezember 2008, 14:55
von 101
Hallo Zusammen:
ich habe eine Liste in der Dateinamen stehen, welche ich nacheinander öffnen möchte.
Nun meinem Problem:
Ich habe mittlerweile einen String "FileTraceName" welcher den Namen der zu öffnenden Datei enthält:
z.B.: u'C:\\Develop\\Workspace\\DECODE\\TEST1.txt'
wenn ich die Datei mit
öffnen will erscheint die Fehlermeldung
IOError: [Errno 2] No such file or directory: "u'C:\\Develop\\Workspace\\DECODE\\TEST1.txt'"
Wenn ich den angegebenen String anstatt FileTraceName einsetze, kann ich die Datei einlesen.
Was mache ich falsch?
Verfasst: Donnerstag 11. Dezember 2008, 15:15
von Jeremy
Hallo 101,
du solltest das u vor dem string löschen.
Code: Alles auswählen
filename = 'F:\Testdaten 3x3\Datentransfer.txt'
file = open(transferfilename, 'r')
Das Beispiel funktioniert bei mir.
Infos gibt es auch hier:
http://openbook.galileocomputing.de/pyt ... 6ead1a782f
Verfasst: Donnerstag 11. Dezember 2008, 15:23
von DjFresH
...eine ähnliche Frage habe ich vor kurzem auch gestellt....
vll hilf dir
http://www.python-forum.de/topic-16764.html das weiter...
Verfasst: Donnerstag 11. Dezember 2008, 15:24
von gkuhl
Hi und willkommen im Forum,
es scheint so als versuchst du den kompletten String, also mit dem "u" und den beiden Anführungszeichen, als Datei zu öffnen. Was nicht geht! Zeig mal ein bisschen mehr Code, damit man besser helfen kann. Die doppelten Backslashs sehen für mich auch seltsam aus, geht das wirklich unter Windows?
Grüße
gkuhl
Verfasst: Donnerstag 11. Dezember 2008, 16:10
von derdon
@gkuhl: Ja, entweder doppelte Backslashes (zum entwerten/escapen) oder
raw-string. Beides sollte man aber vermeiden, indem man auf das
os.path-Modul zurückgreift.
Verfasst: Donnerstag 11. Dezember 2008, 16:11
von Zap
gkuhl hat geschrieben: Zeig mal ein bisschen mehr Code, damit man besser helfen kann.
Das denke ich auch. Es sieht nämlich so aus als wenn du einen String in seiner repräsentierten Form gespeichert hast
gkuhl hat geschrieben:
Die doppelten Backslashs sehen für mich auch seltsam aus, geht das wirklich unter Windows?
Da ist nichts komisches dran. Windows hat nunmal als Seperator das Backslash und dieser muss "escaped" werden damit er richtig interpretiert wird. Es gibt auch noch die Möglichkeit den String als Rawstring zu definieren:
r"\t" == "\\t"
Verfasst: Donnerstag 11. Dezember 2008, 16:34
von gkuhl
Zap hat geschrieben:gkuhl hat geschrieben:
Die doppelten Backslashs sehen für mich auch seltsam aus, geht das wirklich unter Windows?
Da ist nichts komisches dran. Windows hat nunmal als Seperator das Backslash und dieser muss "escaped" werden damit er richtig interpretiert wird.
Oh man, jetzt blick ich das erst. Manchmal sieht man den Wald vor lauter Bäumen nicht.

Verfasst: Donnerstag 11. Dezember 2008, 16:41
von 101
Vielen Dank für die schnelle Hilfe,
das Problem liegt an der Übergabe der "" beim String. Damit kommt die Methode open nicht zurecht. Ich übergebe jetzt zum öffnen der Dateien aus der Liste, die Liste mit dem entsprechenden Index.
War das jetzt eigentlich ein Windows spezifisches Problem?
Verfasst: Donnerstag 11. Dezember 2008, 17:19
von BlackJack
@101: Ich hoffe Du weisst, dass man über die Elemente in Listen direkt iterieren kann und das nicht umständlich über einen Indexzugriff machen muss!?
Verfasst: Donnerstag 11. Dezember 2008, 19:32
von 101
Dies ist mir soweit bekannt, ich muss nur vor dem Einlesen der Dateien aus der Dateiliste den Index der zu verarbeitenden Dateien ermitten.
Also erst alle Dateien aus einem benutzerdefinierten Verzeichnis einlesen und anschließend die Dateiliste nach bestimmten Dateien durchsuchen, welche anschließend weiterbearbeitet wird.
Verfasst: Donnerstag 11. Dezember 2008, 19:55
von BlackJack
Aber wozu brauchst Du Da jetzt einen Index? Oder anders: Für das was Du beschreibst brauchst Du den nicht.
Verfasst: Freitag 12. Dezember 2008, 09:05
von 101
Wenn ich eine Liste mit den Dateien aus einem Verzeichnis habe.
z.B. [TEXT1.txt, TEXT2.txt ,TEXT3.txt, HALLO4.txt, TEST3.txt]
Der Präfix der Datei ist variabel. Wenn ich jetzt die Datei mit der Endung ST3.txt bearbeiten will, ermittle ich vorher den Index der Datei aus der Liste, damit ich den entsprechenden Index für das Öffnen übergeben kann.
Geht es auch einfacher?
Verfasst: Freitag 12. Dezember 2008, 09:18
von Nergal
101 hat geschrieben:Geht es auch einfacher?
Code: Alles auswählen
for File in FileList:
...
TraceFile = open(File, 'rb')
...
Sollte das sein, was du brauchst.
Verfasst: Freitag 12. Dezember 2008, 10:02
von BlackJack
Oder falls ich das Problem richtig verstanden habe:
Code: Alles auswählen
import fnmatch
for filename in fnmatch.filter(filenames, '*ST3.txt'):
# ...
trace_file = open(filename, 'rb')
# ...
Das `glob`-Modul ist eventuell auch interessant.
Verfasst: Freitag 12. Dezember 2008, 11:55
von 101
Wenn ich das so implementiere:
Code: Alles auswählen
filename = fnmatch.filter(filenames, '*ST3.txt')
trace_file = open(filename, 'rb')
geht das ganze wieder schief.
Verfasst: Freitag 12. Dezember 2008, 12:00
von Zap
101 hat geschrieben:Wenn ich das so implementiere:
Code: Alles auswählen
filename = fnmatch.filter(filenames, '*ST3.txt')
trace_file = open(filename, 'rb')
geht das ganze wieder schief.
Das Liegt daran das du keinen filename zurück bekommst sondern eine Liste von filenames.
Siehe Blackjacks Beipiel...
Re: Anfängerfrage: Datei aus Liste öffnen
Verfasst: Freitag 12. Dezember 2008, 12:06
von Nergal
Wie Zap schon erwähnte, bekommst du keinen Dateinamen sondern eine Liste mit Dateinamen zurück.
101 hat geschrieben:ich habe eine Liste in der Dateinamen stehen, welche ich nacheinander öffnen möchte.
Wieso nimmst du dann die for-Schleife wieder raus?
Wenn wirklich alle Dateien in der vorhandenen Liste geöffnet werden sollen nimmst du meinen Vorschlag.
Wenn nur die Dateien mit einer bestimmten Endung geöffnet werden sollen nimmst du BlackJack's Vorschlag.
Verfasst: Freitag 12. Dezember 2008, 12:22
von 101
Mit der for-Schleife haut es hin!
Danke für die Tips!