Python 入门实战:用 pathlib 与 argparse 写一个安全又好复用的文件整理小工具

举报
yd_282288291 发表于 2026/11/03 18:42:04 2026/11/03
【摘要】 很多 Python 初学者学完语法就卡在“不知道写什么”上。文件整理是一个很好的起点:需求真实、结果可见,又能把路径、命令行参数、异常处理这些基础串起来。本文的目标不是写一个功能最全的工具,而是写一个安全、可复用、敢给别人用的小脚本。 先定规则,再写代码动手之前先回答三个问题。第一,整理哪些文件?只处理下载目录还是任意目录?第二,按什么分类?按扩展名分图片、文档、压缩包最直观。第三,遇到重名...

很多 Python 初学者学完语法就卡在“不知道写什么”上。文件整理是一个很好的起点:需求真实、结果可见,又能把路径、命令行参数、异常处理这些基础串起来。本文的目标不是写一个功能最全的工具,而是写一个安全、可复用、敢给别人用的小脚本。

先定规则,再写代码

动手之前先回答三个问题。第一,整理哪些文件?只处理下载目录还是任意目录?第二,按什么分类?按扩展名分图片、文档、压缩包最直观。第三,遇到重名怎么办?直接覆盖是最危险的做法,宁可跳过并记录,也不要悄悄替换。把这三条写成注释,代码就不会越写越乱。

核心思路:四步走

第一步,用 pathlib 的 Path 处理路径,它比字符串拼接更清晰,也能跨平台处理分隔符。第二步,遍历目标目录,只处理文件,跳过子目录和隐藏文件,避免误删系统文件。第三步,根据扩展名查一张映射表,得到目标文件夹;没有命中的文件放进“其他”,不要丢弃。第四步,先做试运行,打印“将从哪里移到哪里”,确认无误后再真正移动。

用 argparse 做命令行

命令行参数用 argparse,比 sys.argv 更友好。至少提供三个参数:目标目录、是否真正执行、是否递归。默认只做试运行,是这个小工具最重要的安全设计。真正执行时再加 --apply,这样误操作也有一次反悔的机会。移动文件时用 shutil.move,遇到同名文件就加序号,例如 report(1).pdf,而不是覆盖。

from pathlib import Path
import argparse

parser = argparse.ArgumentParser()
parser.add_argument("target", type=Path, help="要整理的目录")
parser.add_argument("--apply", action="store_true", help="真正执行移动,否则只做试运行")
args = parser.parse_args()
print(f"目标目录:{args.target},真正执行:{args.apply}")

错误处理要具体

目录不存在、没有读取权限、目标盘空间不足,都应该给出中文提示并正常退出,而不是直接抛出堆栈。建议把每一次移动写进日志:时间、原路径、新路径、是否成功。出了问题,日志就是最好的复盘材料。也可以加一个 --log 参数,把日志写到文件里,方便长期使用。

写完后做三组测试

第一组是空目录,程序应该安静退出,不报错也不新建一堆空文件夹。第二组是少量测试文件,检查分类是否正确、重名是否加序号。第三组是试运行与真正执行的结果对比,确认试运行没有改动任何文件。通过这三组测试,这个小工具就可以放心地用在自己的下载目录上了。

两个扩展练习

第一,支持按修改日期再分一层子目录;第二,把映射表放到 JSON 配置文件里,不改代码就能新增分类。完成之后,你会发现 pathlib、argparse、异常处理和日志不再是孤立的知识点,而是一套可以组合起来解决真实问题的方法。这正是入门阶段最值得建立的感觉:先把小工具做对、做安全,再谈功能多不多。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。