当前位置:首页>python>Python办公自动化系列:整理文件我只用这两个内置库

Python办公自动化系列:整理文件我只用这两个内置库

  • 2026-10-04 11:42:26
Python办公自动化系列:整理文件我只用这两个内置库

<摘要>

一. 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() 同时支持移动和重命名,跨分区也有效。
# 移动文件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% 的文件管理需求:复制备份、批量移动、重命名整理、压缩归档、安全删除、目录遍历。

往期回顾BREAK AWAY
Pandas3.0用Rust重写后性能暴增5倍?
Python办公自动化系列:PPT篇,代码实战提升效率
Python办公自动化系列:Word篇,代码实战提升效率
Python办公自动化系列:Excel篇,代码实战提升效率
2026 年 Python PDF 提取工具终极横评(含 6 款对比)

最新文章

随机文章