<摘要>
一. shutil 模块
1.1 复制文件和文件夹
1.2 移动和重命名文件/文件夹
1.3 永久性删除文件和文件夹
1.4 移入回收站(跨平台安全删除)
1.5 遍历目录树
二. zipfile 模块
2.1 创建和添加到 ZIP 文件
2.2 读取 ZIP 文件内容
2.3 解压缩 ZIP 文件

一. shutil 模块
shutil是Python的文件高级操作模块,处理批量或整目录需求,比os模块更方便。
1.1 复制文件和文件夹
最常用的就是 shutil.copy() 、 shutil.copy2() 和 shutil.copytree()。
import shutil# 复制文件数据和权限模式(最常用)shutil.copy("source.txt", "backup/source_backup.txt")# 比上面那个强一点,它能保留文件的元数据(如创建时间、修改时间)shutil.copy2("report.pdf", "archive/2025_report.pdf")# 复制整个目录树(包含子目录和文件)shutil.copytree("project_folder", "project_folder_backup_20260120")
注意点:
copytree()默认不允许目标目录已存在,要覆盖需加dirs_eist_ok=True(Python 3.8+)
想保留权限、时间戳,用 copy2() 而不是 copy()
1.2 移动和重命名文件/文件夹
# 移动文件shutil.move("old_logs/error.log", "archive/2025/error.log")# 重命名(本质是移动到同目录不同名)shutil.move("data_v1.csv", "data_v2.csv")# 移动整个目录shutil.move("temp_folder", "processed/temp_folder")
注意点:跨磁盘移动时,move() 会先复制再删除源文件,比手动 os.rename() 更可靠。
1.3 永久性删除文件和文件夹
shutil.rmtree() 是最常用的递归删除。
# 删除整个目录树(小心!不可恢复)shutil.rmtree("temp_cache", ignore_errors=True) # 忽略权限错误# 只删单个文件还是用 os.remove()import osos.remove("useless.tmp")
注意点:
先用 os.walk() 打印要删的内容确认
加 ignore_errors=True 避免权限问题中断脚本
在 os 模块中,os.unlink(path) 和 os.remove(path) 完全等价
1.4 移入回收站(跨平台安全删除)
标准库没有原生“移到回收站”,但 send2trash 模块很常用(pip install send2trash)。
from send2trash import send2trashsend2trash("big_file.mp4") # 移到回收站send2trash(["file1.txt", "dir2"]) # 支持列表
如果不想引入第三方库,Windows 上可以用 winshell,macOS/Linux 就只能 rm 了。
1.5 遍历目录树
shutil 本身不遍历,但常和 os.walk() 组合使用。
for root, dirs, files in os.walk("project"):print(f"当前目录: {root}")for file in files:if file.endswith(".log"):print(f" 找到日志: {os.path.join(root, file)}")
shutil提供的高级函数让遍历后操作更简单,比如批量复制特定后缀文件。
二. zipfile 模块
Python 自带 zipfile,无需额外安装,就能创建、读取、解压 zip 文件。
2.1 创建和添加到 ZIP 文件
import zipfile # 先导入整个模块,更清晰with zipfile.ZipFile("backup_20260120.zip", mode="w", compression=zipfile.ZIP_DEFLATED,compresslevel=9) as zf:zf.write("report.pdf")zf.write("data.csv", arcname="folder/data.csv")
追加文件:
with ZipFile("backup.zip", "a") as zf:zf.write("new_log.txt")
compression参数可选:
ZIP_STORED(不压缩,快)、
ZIP_DEFLATED(标准压缩)、
ZIP_BZIP2、ZIP_LZMA(Python 3.3+)。
关键字参数compresslevel是Python3.7版新增的,
设置范围0~9,其中9的压缩程度最高,但速度也最慢。默认值6。
2.2 读取 ZIP 文件内容
with ZipFile("backup.zip", "r") as zf:print(zf.namelist()) # 列出所有文件print(zf.getinfo("report.pdf").file_size) # 查看原始大小print(zf.getinfo("report.pdf").compress_size) # 压缩后大小
2.3 解压缩 ZIP 文件
# 全部解压with ZipFile("backup.zip", "r") as zf:zf.extractall("extracted_folder")# 只解压单个文件with ZipFile("backup.zip", "r") as zf:zf.extract("data.csv", path="output")
密码保护的 zip:
with ZipFile("protected.zip", "r") as zf:zf.setpassword(b"123456")zf.extractall("decrypted")
shutil + zipfile 几乎覆盖了日常脚本 90% 的文件管理需求:复制备份、批量移动、重命名整理、压缩归档、安全删除、目录遍历。