Anda dapat menggunakan os.listdir () untuk mendapatkan file di direktori sumber, os.path.isfile () untuk melihat apakah itu file biasa (termasuk tautan simbolik pada sistem * nix), dan shutil.copy untuk melakukan penyalinan.
Kode berikut hanya menyalin file biasa dari direktori sumber ke direktori tujuan (saya berasumsi Anda tidak ingin sub-direktori disalin).
import os
import shutil
src_files = os.listdir(src)for file_name in src_files:
full_file_name = os.path.join(src, file_name)if os.path.isfile(full_file_name):
shutil.copy(full_file_name, dest)
Haruskah dest menjadi sesuatu seperti C: \ myfolder atau C: \ myfolder \ filename.ext?
Steve Byrne
4
@StevenByrne Bisa jadi, tergantung apakah Anda juga ingin mengganti nama file. Jika tidak, maka destnama direktorinya. shutil.copy(src, dst)"menyalin file src ke file atau direktori dst .... Jika dst menentukan direktori, file tersebut akan disalin ke dst menggunakan nama file dasar dari src."
30
Jika Anda tidak ingin menyalin seluruh pohon (dengan subdirektori dll), gunakan atau glob.glob("path/to/dir/*.*")untuk mendapatkan daftar semua nama file, putar ulang daftar dan gunakan shutil.copyuntuk menyalin setiap file.
for filename in glob.glob(os.path.join(source_dir,'*.*')):
shutil.copy(filename, dest_dir)
Catatan: Anda mungkin harus memeriksa hasil glob dengan os.path.isfile () untuk memastikan itu adalah nama file. Lihat juga jawaban GreenMatt. Meskipun glob hanya mengembalikan nama file seperti os.listdir, ia juga tetap mengembalikan nama direktori. Itu ' . 'pola mungkin cukup, selama Anda tidak memiliki nama file tanpa ekstensi, atau titik di nama direktori.
Berikut adalah contoh lain dari fungsi salin rekursif yang memungkinkan Anda menyalin konten direktori (termasuk sub-direktori) satu file pada satu waktu, yang saya gunakan untuk mengatasi masalah ini.
import os
import shutil
def recursive_copy(src, dest):"""
Copy each file from src dir to dest dir, including sub-directories.
"""for item in os.listdir(src):
file_path = os.path.join(src, item)# if item is a file, copy itif os.path.isfile(file_path):
shutil.copy(file_path, dest)# else if item is a folder, recurse elif os.path.isdir(file_path):
new_dest = os.path.join(dest, item)
os.mkdir(new_dest)
recursive_copy(file_path, new_dest)
EDIT: Jika bisa, pasti gunakan saja shutil.copytree(src, dest). Ini mengharuskan folder tujuan tersebut belum ada. Jika Anda perlu menyalin file ke folder yang ada, metode di atas berfungsi dengan baik!
Jawaban:
Anda dapat menggunakan os.listdir () untuk mendapatkan file di direktori sumber, os.path.isfile () untuk melihat apakah itu file biasa (termasuk tautan simbolik pada sistem * nix), dan shutil.copy untuk melakukan penyalinan.
Kode berikut hanya menyalin file biasa dari direktori sumber ke direktori tujuan (saya berasumsi Anda tidak ingin sub-direktori disalin).
sumber
dest
nama direktorinya.shutil.copy(src, dst)
"menyalin file src ke file atau direktori dst .... Jika dst menentukan direktori, file tersebut akan disalin ke dst menggunakan nama file dasar dari src."Jika Anda tidak ingin menyalin seluruh pohon (dengan subdirektori dll), gunakan atau
glob.glob("path/to/dir/*.*")
untuk mendapatkan daftar semua nama file, putar ulang daftar dan gunakanshutil.copy
untuk menyalin setiap file.sumber
Lihat shutil di dokumen Python , khususnya perintah copytree .
sumber
sumber
sumber
Berikut adalah contoh lain dari fungsi salin rekursif yang memungkinkan Anda menyalin konten direktori (termasuk sub-direktori) satu file pada satu waktu, yang saya gunakan untuk mengatasi masalah ini.
EDIT: Jika bisa, pasti gunakan saja
shutil.copytree(src, dest)
. Ini mengharuskan folder tujuan tersebut belum ada. Jika Anda perlu menyalin file ke folder yang ada, metode di atas berfungsi dengan baik!sumber