Python 文件复制必备技巧:保留原数据、递归复制目录,效果惊艳
引言:
使用 shutil 模块来拷贝文件夹下的所有内容到指定目录。会递归地拷贝整个目录及其所有内容(包括子目录和文件)
Python 3.8 或更高版本
import shutil
import os
def copy_directory(src, dst):
"""
将源目录 (src) 下的所有内容拷贝到目标目录 (dst)
"""
if not os.path.exists(dst):
os.makedirs(dst) #todo 创建目标目录(如果目标目录不存在)
#todo 使用 shutil.copytree 进行递归拷贝
try:
shutil.copytree(src, dst, dirs_exist_ok=True) #todo dirs_exist_ok=True 允许目标目录已存在
print(f"所有文件已成功从 {src} 拷贝到 {dst}")
except Exception as e:
print(f"拷贝过程中发生错误: {e}")
if __name__ == '__main__':
# 示例使用
src_dir = r'D:/source/directory' #todo 源目录
dst_dir = r'D:/destination/directory' #todo 目标目录
copy_directory(src_dir, dst_dir)
代码以适应旧版本的 Python(python3.8以下)
import shutil
import os
def copy_directory(src, dst):
"""
将源目录 (src) 下的所有内容拷贝到目标目录 (dst)
"""
if not os.path.exists(dst):
os.makedirs(dst) #todo创建目标目录(如果目标目录不存在)
#todo遍历源目录中的所有文件和子目录,逐个拷贝
for item in os.listdir(src):
s = os.path.join(src, item)
d = os.path.join(dst, item)
if os.path.isdir(s):
#todo如果是目录,递归调用copy_directory
copy_directory(s, d)
else:
#todo如果是文件,拷贝文件
shutil.copy2(s, d) #todo使用copy2保留文件的元数据(如时间戳)
print(f"所有文件已成功从 {src} 拷贝到 {dst}")
if __name__ == '__main__':
#todo示例使用
src_dir = r'D:/source/directory' #todo源目录
dst_dir = r'D:/destination/directory' #todo目标目录
copy_directory(src_dir, dst_dir)
注意事项:
- 权限问题:在拷贝文件或文件夹时,确保程序具有相应的权限,尤其是在系统目录或受保护目录中进行操作时。
- 大文件或大量文件的拷贝:如果拷贝大量文件或非常大的文件,可能会消耗较多的时间,建议考虑使用多线程(后续会更新)