`shutil`:用于高级文件操作,如复制、移动、删除文件/目录等;
2026/8/8 10:13:37 网站建设 项目流程
  • shutil:用于高级文件操作,如复制、移动、删除文件/目录等;
  • openpyxl:用于读写 Excel(.xlsx)文件,支持公式、样式、图表等;
  • os:提供与操作系统交互的功能,如路径操作、环境变量、文件系统访问等;
  • subprocess:用于创建新进程、执行外部命令(如 shell 命令、可执行程序),并与其输入输出交互。

这些模块常联合用于自动化办公场景,例如:

  • osshutil管理 Excel 文件的路径与备份;
  • openpyxl处理数据读写与格式设置;
  • subprocess调用外部工具(如pandoc转文档、git提交、或导出 PDF 等)。

shutil.copy()shutil.copy2()都用于复制文件,但关键区别在于是否保留源文件的元数据(metadata)

  • shutil.copy(src, dst)
    复制文件内容和权限模式(mode)(如读写执行位),但不保留修改时间(mtime)、访问时间(atime)、创建时间(ctime)等时间戳,也不保留扩展属性(如 SELinux context、ACL 等)。

  • shutil.copy2(src, dst)
    copy()基础上,额外调用copystat(),尽可能保留源文件的所有元数据,包括:

    • 修改时间(st_mtime
    • 访问时间(st_atime
    • 权限模式(st_mode
    • 所有者与组(st_uid,st_gid,需有相应权限)
    • (在支持的系统上)扩展属性、xattr、ACL 等(依赖底层os.chown()/os.utime()/shutil.copystat()实现)

⚠️ 注意:

  • copy2()无法保证 100% 完全复刻所有元数据(例如 Windows 上的“创建时间”可能受限于 API 或目标文件系统);
  • 若目标路径已存在且为目录,两者行为一致(将文件复制到该目录下);若目标为文件,则覆盖;
  • 二者均不复制目录——复制目录需用shutil.copytree()

示例:

importshutilimportos src="data.txt"shutil.copy(src,"copy_basic.txt")# 仅保留权限shutil.copy2(src,"copy_preserve.txt")# 保留时间戳 + 权限 + 更多元数据print("Original mtime:",os.path.getmtime(src))print("Copy2 mtime:",os.path.getmtime("copy_preserve.txt"))# 几乎相同

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询