Python 文件复制必备技巧:保留原数据、递归复制目录,效果惊艳

liftword2个月前 (03-01)技术文章16

引言:

使用 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)

注意事项:

  • 权限问题:在拷贝文件或文件夹时,确保程序具有相应的权限,尤其是在系统目录或受保护目录中进行操作时。
  • 大文件或大量文件的拷贝:如果拷贝大量文件或非常大的文件,可能会消耗较多的时间,建议考虑使用多线程(后续会更新)

相关文章

用Python复制文件的9个方法_python怎么复制文件到另一个地方

Python 中有许多“开盖即食”的模块(比如 os,subprocess 和 shutil)以支持文件 I/O 操作。在这篇文章中,你将会看到一些用 Python 实现文件复制的特殊方法。下面我们开...

文件备份用Python,照着复制粘贴代码就可以了

引言在日常开发和运维工作中,数据安全尤为重要,定期备份重要文件是防范数据丢失的有效手段之一。本文将详细介绍如何使用Python实现一个简单的定时备份脚本,该脚本可以按照设定周期自动将指定文件夹或文件复...

Python浅拷贝深拷贝之copy、deepcopy

笔记记录20221205:个人总结:1,两者基本区别不大;2,在涉及到子对象时候,两者才有区别;3,在涉及到子对象,且子对象的操作后内存地址没有发生变化(如下方代码:dic1['one'].appen...

python散装笔记——76: 数据拷贝_python数据传输

1: 拷贝一个字典字典对象具有复制方法。它执行字典的浅层复制。˃˃˃ d1 = {1:[]} ˃˃˃ d2 = d1.copy() ˃˃˃ d1 is d2 False ˃˃˃ d1[1] is d2...

Python 初学者练习:复制文件_python中的复制

在本教程中,您将学习如何使用 os、shutil 模块中提供的各种函数将文件和文件夹从一个位置复制到另一个位置。在 Python 中使用 copy() 复制文件复制文件可以使用 shutil 模块的...