./a/b/c
, shutil.copy("./blah.txt", "./a/b/c/blah.txt")
adresinde b/c/
gibi bir yol yoksa, hedefin mevcut olmadığı konusunda şikayette bulunulur. Hem hedef yolu oluşturmanın hem de dosyayı bu yola kopyalamanın en iyi yolu nedir?shutil.copy dosyaları için hedef yolunu oluşturun
cevap
Dizin ağacını oluşturmak için os.makedirs
kullanın.
Dizin böyle bir şey yapmadan önce var olup olmadığını kontrol etmek için buna benzer bir şey kullanırım.
if not os.path.exists('a/b/c/'):
os.mkdir('a/b/c')
Bildiğim kadarıyla, bu Python 2.7: OSError'da çalışmaz: [Errno 2] Hayır dosya veya dizin: './a/b/c' – SummerBreeze
Bunun yerine "os.makedirs" yi kullanmayı tercih ederim. – feilong
Bunun bir yarış durumundan muzdarip olduğunu unutmayın (başka biri veya başka bir iş parçacığı, 'makedirler' kontrol ve aranması arasında dizin oluşturuyorsa). Klasör var ise 'os.makedirs' çağırmak ve istisna yakalamak daha iyidir. Dizin oluşturma için SoF kontrol edin. – farmir
EAFP yolu, ırklar ve gereksiz syscalls kaçının:
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)
Eğer 'shut'.'' için yapılan çağrıdan sonra' '' '' s'ma's''ndan önce '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''''''' için çağrılırsa bir yarış var demektir. – Lii
- 1. Hedef zaten mevcut olduğunda ve salt okunur olduğunda shutil.copy hatası
- 2. Octopack nuget package dosyasının hedef yolunu belirtin
- 3. Hedef dizine ne koymalıyım?
- 4. Mevcut mysql tablosundan raylarda geçiş dosyaları oluşturun
- 5. VS 2010 C# XML belgelerinden HTML/Yardım dosyaları oluşturun
- 6. Android için Rsync oluşturun
- 7. Bash/Shell-Tüm dosyaları alt dizinlerden hedef dizine taşıyın mı?
- 8. Notepad ++ içinde geçerli dosyanın yolunu anlamak için NppExec'i edinin (Python komut dosyaları için)
- 9. python .pyc dosyaları neden kaynak kodlarının mutlak yolunu içerir?
- 10. Bir bileşen için bower-installer yolunu değiştirme
- 11. Hiçbir hedef Belirtilen şeması için geçerli olan -Hedef bayrağıyla belirtilmiş
- 12. Bir hedef için derleme oluştur
- 13. Hedef sayıcılar için sayaçların ayarlanması
- 14. Cargo.toml yolunu belirtme yolu
- 15. package.json "komut dosyaları" bölümündeki WebStorm çalıştırma yapılandırmaları oluşturun
- 16. Bir SDK (tek jar dosyası) ile "so" dosyaları oluşturun
- 17. Python komut dosyaları oluşturun ve yöntemleri arayın C#
- 18. Değişken hedef sayısı oluşturmak için SCons
- 19. javascript'ten ekipcity oturumu oluşturun
- 20. cmake hedef kitaplığı olarak özel hedef
- 21. dosyaları
- 22. hedef klasöre
- 23. Python'da (DOS'ta) shutil.copy() işlevinin dönüş değerini nasıl alabilirim?
- 24. Neden cp yapmıyorsa shutil.copy() neden bir izin istisnası oluşturur?
- 25. Hedef Mülkiyet
- 26. Cmake hedef tetikleme yüklemek
- 27. Yalnızca Python3 için Python Yolunu Değiştirin
- 28. Javascript dosyası için Laravel 'public' yolunu alın
- 29. Tam hiyerarşi yolunu almak için SQL sorgusu
- 30. Hedef dosya Ant NetBeans projesinde
Kullanım 'os.makedirs (klasör, exists_ok = True)' hedef klasör var olabilir ne zaman için. – Martlark
'exists_ok' seçeneğinin yalnızca Python 3.2+ –
içinde bulunduğunu unutmayın' ex_ok' değil, exists_ok' değil – CharlesB