Jeśli ścieżka taka jak b/c/
nie istnieje w ./a/b/c
, shutil.copy("./blah.txt", "./a/b/c/blah.txt")
, będzie skarżyć się, że miejsce docelowe nie istnieje. Jaki jest najlepszy sposób utworzenia ścieżki docelowej i skopiowania pliku do tej ścieżki?utwórz ścieżkę docelową dla plików shutil.copy
Odpowiedz
Użyj os.makedirs
, aby utworzyć drzewo katalogów.
Używam czegoś podobnego do tego, aby sprawdzić, czy katalog istnieje, zanim coś z nim zrobię.
if not os.path.exists('a/b/c/'):
os.mkdir('a/b/c')
O ile mi wiadomo, to nie zadziała w Pythonie 2.7: OSError: [Errno 2] No such plik lub katalog: './a/b/c' – SummerBreeze
Zamiast tego wolę używać 'os.makedirs', który tworzy katalogi nadrzędne, jeśli nie istnieją. – feilong
Należy pamiętać, że cierpi na to stan wyścigu (jeśli ktoś inny lub inny wątek utworzy katalog pomiędzy sprawdzeniem i wywołaniem 'makedirs'). Lepiej wywołać 'os.makedirs' i wychwycić wyjątek, jeśli folder istnieje. Sprawdź SoF w celu utworzenia katalogu. – farmir
EAFP sposób uniknąć ras i niepotrzebnych wywołań systemowych:
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)
Ciągle jest wyścig, jeśli 'dest' dir zostanie utworzony po wywołaniu' shutil.copy', ale przed wywołaniem 'os.makedirs'. – Lii
- 1. Tworzenie skrótu modyfikuje ścieżkę docelową
- 2. jak znaleźć ścieżkę docelową linku jeśli plik jest plikiem Link
- 3. tinyMCE jako docelową dla NG2 drop-dnd
- 4. Utwórz zestaw losowych plików JPG
- 5. Jak zmienić ścieżkę folderu dla plików SWP w Vim
- 6. Dodawanie plików do nagłówka zaćmienie gromadzeniu ścieżkę dla C++
- 7. Szyny - Jak uzyskać ścieżkę pliku (nie ścieżkę URL) dla zasobów?
- 8. Utwórz regułę w makefile tylko dla zestawu plików
- 9. Java - pobierz ścieżkę do "plików programów"
- 10. CMAKE Jak uzyskać docelową lokalizację pliku
- 11. Utwórz ścieżkę z ciągu znaków w języku Java7
- 12. Utwórz mapę bitową/ścieżkę do rysowania ze ścieżki pliku
- 13. Jak zmienić ścieżkę instalatora dla jednego komponentu?
- 14. rubymine projekt wyszukiwania dla pliku przez ścieżkę
- 15. Utwórz proxy dla właściwości zależności
- 16. JAXB, XJC -> utwórz wiele plików klas
- 17. Jak ustawić ścieżkę biblioteki C# dla aplikacji?
- 18. Jak uzyskać ścieżkę odpowiednią do przechowywania plików tymczasowych?
- 19. Utwórz profil PySpark dla IPython
- 20. Utwórz hasło roota dla PHPMyAdmin
- 21. Utwórz obserwowalne dla pętli zdarzeń
- 22. Uzyskaj ścieżkę witryny ASP.NET MVC w systemie plików
- 23. Jak poprawnie ustawić ścieżkę plików cookie JSESSIONID za odwrotnym proxy
- 24. Utwórz plik w sposób bezpieczny dla wątków
- 25. XCode 8: jak zmienić docelową rodzinę urządzeń
- 26. pyhs2/ula żadnych plików pasujących plik ścieżkę i plik istnieje
- 27. Utwórz korpus z wielu plików html w R
- 28. Utwórz plik znaczników dla lateksu dla etykiet i elementów ślinikowych
- 29. ClassPathResource nie dostać ścieżkę klasy
- 30. Jak uzyskać pełną ścieżkę dostępu do pliku z wejściem plików
użyć 'os.makedirs (folder, exists_ok = True)', gdy może istnieć folder docelowy. – Martlark
Zauważ, że opcja 'exist_ok' jest obecna tylko w Pythonie 3.2+ –
To' exist_ok', a nie 'exists_ok' – CharlesB