问题:在Python中复制多个文件
如何使用Python将一个目录中存在的所有文件复制到另一目录中。我有源路径和目标路径作为字符串。
回答 0
您可以使用os.listdir()来获取源目录中的文件,使用os.path.isfile()来查看它们是否为常规文件(包括* nix系统上的符号链接),然后使用shutil.copy进行复制。
以下代码仅将常规文件从源目录复制到目标目录(我假设您不希望复制任何子目录)。
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)
回答 1
如果您不想复制整个树(带有子目录等),请使用或glob.glob("path/to/dir/*.*")
获取所有文件名的列表,遍历该列表并用于shutil.copy
复制每个文件。
for filename in glob.glob(os.path.join(source_dir, '*.*')):
shutil.copy(filename, dest_dir)
回答 2
回答 3
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
回答 4
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)
回答 5
这是递归复制功能的另一个示例,该函数使您可以一次复制一个文件的目录(包括子目录)的内容,这是我用来解决此问题的方法。
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)
编辑:如果可以,绝对可以使用shutil.copytree(src, dest)
。这要求目标文件夹尚不存在。如果您需要将文件复制到现有文件夹中,则上述方法效果很好!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。