Python kullanarak bir dizinde bulunan tüm dosyaları başka bir dizine kopyalama. Dize olarak kaynak yolu ve hedef yol var.
Yanıtlar:
Sen kullanabilirsiniz () os.listdir kaynak dizinindeki dosyaları almak için, os.path.isfile () onlar (* Nix sistemleri üzerinde simgesel bağlantılar dahil) düzenli dosyalar olup olmadığını görmek ve için shutil.copy kopyalama yapmak.
Aşağıdaki kod, kaynak dizinden yalnızca normal dosyaları hedef dizine kopyalar (herhangi bir alt dizinin kopyalanmasını istemediğinizi varsayıyorum).
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)
dest
, dizin adıdır. shutil.copy(src, dst)
"src dosyasını dst dosyasına veya dizinine kopyalar .... dst bir dizini belirtirse, dosya src'deki temel dosya adı kullanılarak dst'ye kopyalanacaktır."
for fn in os.listdir(src)
Tüm ağacı (alt dizinlerle vb.) Kopyalamak istemiyorsanız, veya tuşunu glob.glob("path/to/dir/*.*")
kullanarak tüm dosya adlarının bir listesini alın, liste üzerinde döngü yapın ve shutil.copy
her dosyayı kopyalamak için kullanın .
for filename in glob.glob(os.path.join(source_dir, '*.*')):
shutil.copy(filename, dest_dir)
Bak Python docs shutil , özellikle copytree komutu.
Hedef dizin zaten mevcutsa şunu deneyin:
shutil.copytree(source, destination, dirs_exist_ok=True)
dirs_exist_ok=True
seçeneği.
def recursive_copy_files(source_path, destination_path, override=False):
"""
Recursive copies files from source to destination directory.
:param source_path: source directory
:param destination_path: destination directory
:param override if True all files will be overridden otherwise skip if file exist
:return: count of copied files
"""
files_count = 0
if not os.path.exists(destination_path):
os.mkdir(destination_path)
items = glob.glob(source_path + '/*')
for item in items:
if os.path.isdir(item):
path = os.path.join(destination_path, item.split('/')[-1])
files_count += recursive_copy_files(source_path=item, destination_path=path, override=override)
else:
file = os.path.join(destination_path, item.split('/')[-1])
if not os.path.exists(file) or override:
shutil.copyfile(item, file)
files_count += 1
return files_count
import os
import shutil
os.chdir('C:\\') #Make sure you add your source and destination path below
dir_src = ("C:\\foooo\\")
dir_dst = ("C:\\toooo\\")
for filename in os.listdir(dir_src):
if filename.endswith('.txt'):
shutil.copy( dir_src + filename, dir_dst)
print(filename)
Burada, dizinin içeriğini (alt dizinler dahil) bir seferde bir dosya kopyalamanıza izin veren ve bu sorunu çözmek için kullandığım özyinelemeli kopyalama işlevinin başka bir örneği var.
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 it
if 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)
DÜZENLEME: Yapabiliyorsanız, kesinlikle kullanın shutil.copytree(src, dest)
. Bu, hedef klasörün zaten mevcut olmamasını gerektirir. Dosyaları mevcut bir klasöre kopyalamanız gerekiyorsa, yukarıdaki yöntem işe yarar!