копирование нескольких файлов в python


Как скопировать все файлы из одного каталога в другой в Python. У меня есть исходный путь и путь назначения в строку.

5 59

5 ответов:

можно использовать ОС.listdir() чтобы получить файлы в исходном каталоге, ОС.путь.isfile() чтобы увидеть, являются ли они обычными файлами (включая символические ссылки на системах *nix) и shutil.копировать для копирования.

следующий код копирует только файлы из исходного каталога в целевой каталог (я предполагаю, что вы не хотите никаких подкаталогов копируется).

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)

Если вы не хотите, чтобы скопировать все дерево (с подкаталогами и т. д.), использовать или glob.glob("path/to/dir/*.*") чтобы получить список всех имен файлов, выполните цикл по списку и используйте shutil.copy для копирования каждого файла.

for filename in glob.glob(os.path.join(source_dir, '*.*')):
    shutil.copy(filename, dest_dir)

посмотреть shutil в Python docs, в частности copytree.

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)