pathlib + shutil + glob
文件操作的瑞士军刀
优雅10倍
1、pathlib — 路径操作(取代 os.path)
from pathlib import Path# 路径拼接(跨平台兼容)base = Path("/Users/rose/Desktop")report = base / "reports" / "2026" / "sales.xlsx"# 查询属性print(report.exists()) # 文件是否存在print(report.is_file()) # 是否是文件print(report.is_dir()) # 是否是目录print(report.suffix) # ".xlsx"print(report.stem) # "sales"print(report.parent) # .../2026# 创建目录(Path("/tmp/demo") / "sub").mkdir(parents=True, exist_ok=True)# 读文件(简单场景)content = Path("readme.md").read_text(encoding="utf-8")
2、glob — 批量查找文件
from pathlib import Pathimport glob# 查找所有 .py 文件py_files = list(Path(".").rglob("*.py")) # 递归print(len(py_files))# 查找特定模式csv_files = glob.glob("data/**/*.csv", recursive=True) # 递归log_files = list(Path("/var/log").glob("*.log"))# 按修改时间筛选from datetime import datetime, timedeltarecent = [f for f in Path(".").rglob("*.py") if datetime.now() - datetime.fromtimestamp(f.stat().st_mtime) < timedelta(days=7)]
import shutilfrom pathlib import Path# 复制文件shutil.copy("source.txt", "dest.txt")# 复制目录shutil.copytree("src_folder", "dst_folder")# 移动文件/目录shutil.move("old_path", "new_path")# 删除文件(不用os.remove)Path("temp.txt").unlink()# 安全删除(移到回收站,谨慎操作)# pip install send2trashfrom send2trash import send2trashsend2trash("old_file.xlsx") # 进回收站,可恢复!
from pathlib import Path# 批量给文件加前缀for f in Path(".").glob("*.txt"): new_name = f"backup_{f.name}" f.rename(f.parent / new_name)# 批量修改扩展名for f in Path(".").glob("*.jpeg"): f.rename(f.with_suffix(".jpg"))# 批量移动到分类目录images = Path(".").glob("*.png")for img in images: dest = Path("images") / img.name dest.parent.mkdir(exist_ok=True) shutil.move(str(img), str(dest))
import shutil# 压缩(.zip)shutil.make_archive("backup_2026", "zip", "my_folder")# 压缩(.tar.gz)shutil.make_archive("backup_2026", "gztar", "my_folder")# 解压shutil.unpack_archive("backup_2026.zip", extract_dir="extracted")
-------------------------它是数字世界里的一把杀猪刀
却总能巧夺天工
它的世界是纯粹0、1组合
却总能创造无尽幻想
......
本公众号关注数据价值分析、编程学习,将不定期更新社会热点数据分析结果、编程技巧,分享数据分析工具、方法、学习等内容,欢迎有兴趣的小伙伴加入。