Python似乎有复制文件的函数(例如shutil.copy
)和复制目录的函数(例如shutil.copytree
),但我还没有找到同时处理这两种功能的函数。当然,检查您是否想要复制文件或目录是微不足道的,但这似乎是一个奇怪的遗漏。
是否真的没有像unix cp -r
命令那样工作的标准函数,即同时支持目录和文件并递归复制?在Python中解决这个问题最优雅的方法是什么?
发布于 2010-01-03 20:35:26
我建议您首先调用shutil.copytree
,如果抛出异常,则使用shutil.copy
重试。
import shutil, errno
def copyanything(src, dst):
try:
shutil.copytree(src, dst)
except OSError as exc: # python >2.5
if exc.errno in (errno.ENOTDIR, errno.EINVAL):
shutil.copy(src, dst)
else: raise
发布于 2017-03-04 19:37:59
要添加Tzot's和gns答案,这里有一种递归复制文件和文件夹的替代方法。(Python 3.X)
import os, shutil
root_src_dir = r'C:\MyMusic' #Path/Location of the source directory
root_dst_dir = 'D:MusicBackUp' #Path to the destination folder
for src_dir, dirs, files in os.walk(root_src_dir):
dst_dir = src_dir.replace(root_src_dir, root_dst_dir, 1)
if not os.path.exists(dst_dir):
os.makedirs(dst_dir)
for file_ in files:
src_file = os.path.join(src_dir, file_)
dst_file = os.path.join(dst_dir, file_)
if os.path.exists(dst_file):
os.remove(dst_file)
shutil.copy(src_file, dst_dir)
如果这是你的第一次,并且你不知道如何递归地复制文件和文件夹,我希望这对你有帮助。
发布于 2017-02-15 20:37:01
shutil.copy
和shutil.copy2
正在复制文件。
shutil.copytree
会复制一个包含所有文件和所有子文件夹的文件夹。shutil.copytree
正在使用shutil.copy2
复制文件。
因此,您所说的类似于cp -r
是shutil.copytree
,因为cp -r
定位并复制一个文件夹及其文件/子文件夹,如shutil.copytree
。在没有-r
的情况下,cp
会像shutil.copy
和shutil.copy2
一样复制文件。
https://stackoverflow.com/questions/1994488
复制相似问题