说真的,大家写 Python 的时候,最烦的事情里肯定有一项:处理文件路径和增删改查。
虽然 Python 自带了 os 和 shutil,甚至后来有了 pathlib,但每次想实现个简单的功能,比如“如果文件夹不存在就建一个,顺便把里面的旧文件清了”,你还是得写好几行代码。逻辑稍微复杂点,代码就写得跟乱麻一样,还得反复查文档确认 os.makedirs 的参数到底叫啥。
我前阵子在做一个自动化脚本,需要频繁地压缩、解压、改名、算哈希值,折腾得我头大。直到我撞见了 python-fsutil。用完之后我只有一个感想:这才是给“懒人”程序员准备的神器啊!
到底啥是 python-fsutil?
简单来说,它就是一个“宇宙级”的文件系统操作工具箱。它把那些散落在各个标准库里的功能全部打碎、重组,封装成了极其直观的函数。
你不用再纠结是用 os 还是 shutil,直接 import fsutil,剩下的交给它就行。
这玩意儿到底有多省心?
咱们直接看几个我平时用得最多的场景,你就明白我为什么吹它了。
文件操作的“全家桶”体验
以前我们要读个 JSON,得先 open,再 json.load,最后还得记得 close。用 fsutil 呢?
import fsutil
# 一行代码读 JSON,不香吗?
data = fsutil.read_file_json('config.json')
# 想写个 JSON 也是一行搞定
fsutil.write_file_json('data.json', data, indent=4)
还有更绝的,比如你想给文件改名,但只想改后缀名,或者只想改文件名主体。以前你得先用 os.path.splitext 拆开,改完再拼回去。现在:
# 直接改后缀,不用管路径拆解
fsutil.rename_file_extension('image.jpg', 'webp')
# 或者更高级的,用 lambda 批量处理文件名
fsutil.transform_filepath('My Photo.jpg', basename=lambda b: b.lower().replace(' ', '_'))
# 结果直接变成 my_photo.jpg
懒人的福音:自动创建目录
这是我最喜欢的功能,没有之一。
写文件的时候,如果父目录不存在,Python 默认会报错。你得先手动 makedirs。fsutil 里的 make_dirs_for_file 简直是救星:
# 路径再深也不怕,它会自动帮你把中间没建的文件夹全建好
fsutil.make_dirs_for_file('logs/2023/12/01/error.log')
各种“人性化”的小工具
有些功能虽然不难写,但每次都要重复写就很烦。比如:
- • 获取人类可读的文件大小:它能直接把字节转成
1.2 MB 这种格式。 - • 下载文件:直接
download_file(url, dirpath),连 requests 的繁琐配置都帮你省了。 - • 哈希校验:想看两个文件夹内容一不一样?
get_dir_hash(path) 秒出结果。
常用功能一览表(部分)
为了让大家更有体感,我整理了一个它最常用的功能表,大家可以感受一下这个覆盖面:
| | |
| 路径处理 | join_path | |
| 文件读写 | read_file_lines | |
| 压缩解压 | create_zip_file | |
| 安全检查 | assert_exists | |
| 搜索清理 | search_files | |
为什么我强烈推荐你试试?
其实市面上这类库不少,但 python-fsutil 赢在纯粹。它没有那种花里胡哨的链式调用(有时候链式调用反而难调试),就是老老实实的函数式调用。
它的源码我也扫过一眼,非常干净,本质上是对标准库的极佳封装。这意味着它很稳定,不会带入什么奇奇怪怪的 Bug。
怎么装?
老规矩,一行命令:
pip install python-fsutil
如果你平时需要写爬虫存数据、写自动化脚本处理文档,或者只是单纯讨厌处理那些乱七八糟的路径拼接,信我,装上它,你的代码能少写一半,心情能好上一整天。
最后多说一句,这个库的作者真的懂“懒人”的需求。很多时候,我们不需要多复杂的架构,我们要的就是那种“我想要这个效果,你给我一个函数搞定”的爽快感。
项目地址:https://github.com/fabiocaccamo/python-fsutil