Muss ich übergeben Sie den vollständigen Pfad einer Datei in ein anderes Verzeichnis zu öffnen()?
Habe ich einen Ordner mit zehn Dateien, die ich will, um eine Schleife durch. Wenn ich drucken Sie den Namen der Datei meinen code gut funktioniert:
import os
indir = '/home/des/test'
for root, dirs, filenames in os.walk(indir):
for f in filenames:
print(f)
Ausgegeben:
1
2
3
4
5
6
7
8
9
10
Aber wenn ich versuche die Datei zu öffnen, in der Schleife bekomme ich ein IO-Fehler:
import os
indir = '/home/des/test'
for root, dirs, filenames in os.walk(indir):
for f in filenames:
log = open(f, 'r')
Traceback (most recent call last):
File "/home/des/my_python_progs/loop_over_dir.py", line 6, in <module>
log = open(f, 'r')
IOError: [Errno 2] No such file or directory: '1'
>>>
Muss ich übergeben Sie den vollständigen Pfad der Datei, die auch innerhalb der Schleife zu open()
Sie?
- Versuchen Sie zu durchqueren, eine Verzeichnisstruktur oder sind Sie einfach nur interessiert in den regulären Dateien in einem bestimmten Verzeichnis/Ordner?
- Ich weiß, diese Frage ist vier Jahre alt, aber es immer noch nicht über eine akzeptierte Antwort.
- Ja. Verwandte: Python open() gibt IOError: Errno 2 No such file or directory
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, Sie müssen den vollständigen Pfad.
Ist die schnelle Lösung. Wie der Kommentar wies darauf hin,
os.walk
decends in Unterverzeichnisse, also müssen Sie das aktuelle Verzeichnis root anstattindir
als Basis für den join-Pfad.os.walk
steigt in Unterverzeichnisse, so sollten Sie nicht verwendenindir
hier. Verwendenroot
.Wenn Sie auf der Suche sind nur die Dateien in einem einzigen Verzeichnis (dh Sie sind nicht versuchen, durchqueren Sie ein Verzeichnis, das es nicht aussieht), warum nicht einfach verwenden os.listdir():
statt os.walk(). Sie können geben Sie einen Pfad als parameter für os.listdir(). os.Pfad.isfile() wird ermittelt, ob der gegebene Dateiname eine Datei.
.
enthältfile1
,directory1
unddirectory1
enthältfile2
. der OP-code druckenfile1
,file2
in der Erwägung, dass Ihre Lösung würde zu druckenfile1
,directory1
. (sorry, das ist wirklich schwer zu erklären, in den Kommentaren).os.walk
tut. Aber ich nehme an, man bedeckt, dass mit "wenn Sie nur auf der Suche nach Dateien in einem einzigen Verzeichnis"...fn
darstellen? Datei-name?fn
ist kurz mit dem Namen, jedes mal, wenn es iteriert durch die Liste der Dateinamen im aktuellen Verzeichnis, diese variable auf einen anderen Dateinamen.path
(variable), und aktualisieren Sie die if-Zeile zuif os.path.isfile(os.path.join(path, fn)):
.Müssen Sie den Pfad angeben, an dem Sie arbeiten:
Den Beispielen os.Spaziergang in die Dokumentation zeigen, wie dies zu tun:
Wie hat Sie erwarten, dass die "öffnen" - Funktion, um zu wissen, dass der string "1" ist soll das bedeuten "/home/des/test/1" (außer "/home/des/test" passiert, ist Ihr Aktuelles Arbeitsverzeichnis)?
Hier ist ein Ausschnitt, der zu Fuß die Datei Baum für Sie: