Python tampaknya memiliki fungsi untuk menyalin file (misalnya shutil.copy
) dan fungsi untuk menyalin direktori (misalnya shutil.copytree
) tetapi saya belum menemukan fungsi yang menangani keduanya. Tentu, memeriksa apakah Anda ingin menyalin file atau direktori adalah hal yang mudah, tetapi sepertinya ada kelalaian yang aneh.
Apakah benar-benar tidak ada fungsi standar yang bekerja seperti cp -r
perintah unix , yaitu mendukung direktori dan file serta salinan secara rekursif? Apa cara paling elegan untuk mengatasi masalah ini dengan Python?
copytree
menyalin satu file?Jawaban:
Saya sarankan Anda menelepon dulu
shutil.copytree
, dan jika ada pengecualian, coba lagi denganshutil.copy
.sumber
shutil.copytree
fungsi untuk meningkatkan dan mengelola kedua kasus di masa mendatang. 4) Pengecualian tidak terlalu luar biasa di Python; misalnya sebuah iterasi berhenti dengan menampilkan pengecualian StopIteration.Untuk menambah Tzot ini dan GNS jawaban, inilah alternatif cara menyalin file dan folder secara rekursif. (Python 3.X)
Jika ini pertama kalinya Anda dan Anda tidak tahu cara menyalin file dan folder secara rekursif, saya harap ini membantu.
sumber
shutil.copy
danshutil.copy2
sedang menyalin file.shutil.copytree
menyalin folder dengan semua file dan semua subfolder.shutil.copytree
digunakanshutil.copy2
untuk menyalin file.Jadi analogi yang
cp -r
Anda katakan adalahshutil.copytree
karenacp -r
menargetkan dan menyalin folder dan file / subfolder seperti itushutil.copytree
. Tanpa-r
cp
salinan file likeshutil.copy
andshutil.copy2
do.sumber
shutil.copytree('C:\myfile.txt', 'C:\otherfile')
. Itu tidak berhasil. Itulah yang ditanyakan OP ... 7 tahun yang lalu.Unix
cp
tidak 'mendukung direktori dan file':Untuk membuat cp menyalin direktori, Anda harus memberi tahu cp secara manual bahwa itu adalah direktori, dengan menggunakan tanda '-r'.
Ada beberapa pemutusan di sini meskipun -
cp -r
ketika melewati nama file sebagai sumber akan dengan senang hati menyalin hanya satu file; copytree tidak akan.sumber
Saya pikir copy_tree adalah yang Anda cari
sumber
Metode python shutil.copytree itu berantakan. Saya telah melakukan satu yang berfungsi dengan benar:
sumber