每天整理电脑里的文档、照片或下载内容时,你是不是还在手动复制粘贴?其实用 Python 的文件操作库,几行代码就能自动完成。比如你想把“下载”文件夹里所有的 PDF 文件移到“文档”目录下,完全不需要一个个拖动。
os 和 shutil:基础但实用
Python 自带的 os 和 shutil 模块是处理文件的常用组合。os 能查看路径、列出文件,shutil 则擅长复制、移动和删除。
import os
import shutil
source_dir = "/Users/name/Downloads"
dest_dir = "/Users/name/Documents/PDFs"
for filename in os.listdir(source_dir):
if filename.endswith(".pdf"):
src_path = os.path.join(source_dir, filename)
dest_path = os.path.join(dest_dir, filename)
shutil.move(src_path, dest_path)
这段代码会扫描 Downloads 目录,找到所有以 .pdf 结尾的文件,然后移动到目标文件夹。换种后缀,比如 .jpg 或 .docx,就能处理照片或 Word 文档。
pathlib:更现代的写法
从 Python 3.4 开始,pathlib 成了推荐的路径操作方式。它把路径当作对象来处理,读起来更直观。
from pathlib import Path
source = Path("/Users/name/Downloads")
dest = Path("/Users/name/Documents/Photos")
dest.mkdir(exist_ok=True) # 如果目录不存在就创建
for file in source.glob("*.jpg"):
if file.is_file():
shutil.copy(file, dest / file.name)
这里用 Path 创建路径对象,glob 方法查找特定格式的文件,整个过程像在读一句话,逻辑清晰。
实际场景:自动归档工作周报
假设每周五你都要把当周写的周报文件从“待归档”移到“已归档/2025-W12”这样的目录里。可以用时间模块配合 pathlib 自动生成文件夹名称。
from datetime import datetime
now = datetime.now()
week_num = now.strftime("%Y-W%U")
archive_folder = Path("已归档") / week_num
archive_folder.mkdir(exist_ok=True, parents=True)
for report in Path("待归档").glob("*周报*.docx"):
shutil.move(report, archive_folder / report.name)
每到周五运行一下脚本,所有带“周报”字样的文档自动归类,再也不怕遗漏。
小技巧:避免重复操作
有时候脚本不小心多跑了一次,文件已经被移走了,再执行会出错。可以在操作前加个判断:
if dest.exists():
print(f"{dest} 已存在,跳过 {file.name}")
else:
shutil.copy(file, dest)
这样即使重复运行,也不会报错或覆盖文件。
这些文件操作库不只适合整理个人文件,写个小脚本批量重命名发票、合并日志、清理缓存都很方便。关键是不用每次都点开文件夹慢慢找,省下来的时间喝杯咖啡更实在。