Wenn ein Pfad wie b/c/
in ./a/b/c
nicht existiert, wird sich shutil.copy("./blah.txt", "./a/b/c/blah.txt")
beschweren, dass das Ziel nicht existiert. Was ist der beste Weg, um den Zielpfad zu erstellen und die Datei in diesen Pfad zu kopieren?Zielpfad für shutil.copy-Dateien erstellen
Antwort
Verwenden Sie os.makedirs
, um den Verzeichnisbaum zu erstellen.
Ich benutze etwas Ähnliches, um zu überprüfen, ob das Verzeichnis existiert, bevor man damit etwas macht.
if not os.path.exists('a/b/c/'):
os.mkdir('a/b/c')
Soweit ich weiß, wird dies in Python 2.7 nicht funktionieren: OSError: [Errno 2] Nein Datei oder Verzeichnis: './a/b/c' – SummerBreeze
Ich bevorzuge stattdessen 'os.makedirs', die übergeordnete Verzeichnisse erstellen würden, wenn sie nicht existieren. – feilong
Beachten Sie, dass dies unter einer Racebedingung leidet (wenn ein anderer oder ein anderer Thread das Verzeichnis zwischen dem check und dem Aufruf von 'makedirs' erstellt). Rufen Sie besser "os.makedirs" auf und fangen Sie die Ausnahme ab, wenn der Ordner existiert. Überprüfen Sie SoF für die Verzeichniserstellung. – farmir
EAFP Weise vermeiden Rennen und nicht benötigten syscalls:
import errno
import os
import shutil
src = "./blah.txt"
dest = "./a/b/c/blah.txt"
# with open(src, 'w'): pass # create the src file
try:
shutil.copy(src, dest)
except IOError as e:
# ENOENT(2): file does not exist, raised also on missing dest parent dir
if e.errno != errno.ENOENT:
raise
# try creating parent directories
os.makedirs(os.path.dirname(dest))
shutil.copy(src, dest)
Es gibt immer noch ein Rennen, wenn 'dest' dir nach dem Aufruf von' shuthil.copy' erstellt wird, aber vor dem Aufruf von 'os.makedirs'. – Lii
- 1. Webpack url-loader-Set Zielpfad
- 2. Zielpfad der Octopack nuget Paketdatei angeben
- 3. Capistrano Zielpfad bereits existiert, kein leeres Verzeichnis
- 4. Ist dies der richtige Zielpfad unter
- 5. Wie Referenzquelle, ohne den gesamten Zielpfad verwenden zu müssen?
- 6. Linker Outfile Eigenschaftendatei stimmt nicht mit Zielpfad überein?
- 7. Subversion: Was bedeutet "Zielpfad existiert nicht" beim Zusammenführen?
- 8. Kann ich kein "leeres Leerzeichen" als Zielpfad beim Debuggen verwenden?
- 9. Wie kann ich herausfinden, ob der Zielpfad für jede symbolische Verbindung im aktuellen Verzeichnis tatsächlich existiert?
- 10. Wie man Inhouse-Kartennavigation für iOS-Anwendung erstellen?
- 11. C# installer erstellen - nach Parametern für die Verknüpfung fragen
- 12. Wie programmiere ich programmgesteuert auf den Zielpfad eines symbolischen Windows-Links?
- 13. Konfigurationsempfehlungen für Computer erstellen?
- 14. Verzeichnis für imgs erstellen
- 15. Code für anaylist erstellen
- 16. Musterregel für Unterverzeichnisse erstellen
- 17. Alias für Hintergrundfarbe erstellen
- 18. Schnittstelle für ObjectContext erstellen
- 19. Erstellen Variablenname für Tabelle
- 20. Datensatz für LeNet erstellen?
- 21. Erstellen crti.o für i386
- 22. erstellen mdx für Airwatch
- 23. wie Zielpfad des Link zu finden, wenn die Datei eine Link-Datei
- 24. Warum bekomme ich einen "Zielpfad"? existiert bereits "Fehler beim Klonen von meinem Webserver Server?
- 25. Hash für beliebige Objekte erstellen?
- 26. PySpark Profil für IPython erstellen
- 27. Parametrisierte Abfrage für pyodbc erstellen
- 28. Test für benutzerdefinierten Validator erstellen
- 29. Erstellen von Regex für Befehle
- 30. Erstellen von Rahmen für uitableview
Verwenden 'os.makedirs (Ordner, exists_ok = True)' für wenn Zielordner vorhanden sein kann. – Martlark
Beachten Sie, dass die Option 'exists_ok 'nur in Python 3.2 + vorhanden ist. –
Es ist' exist_ok', nicht 'exists_ok' – CharlesB