写 Python 久了以后,你会发现真正提升效率的,不一定是复杂框架。
很多时候,一个顺手的小库、一个标准库里的工具,就能让原本啰嗦的代码变得干净很多。
今天整理 7 组非常值得放进日常工具箱里的 Python 库。
它们覆盖文件处理、日志、命令行参数、数据结构、并发任务、配置读写和命令行体验。
如果你经常写脚本、做数据处理、跑自动化任务,这篇可以收藏起来慢慢用。
以前写文件路径,很多人习惯用 os.path。
它当然能用,但代码经常会变得比较碎:拼路径、判断目录、创建文件夹、读写文件,都要分开处理。
pathlib 的好处是把路径当成对象。
路径拼接、目录创建、文件读写都能用更直观的方式完成。
代码开始:
from pathlib import Path
p = Path("data") / "result.txt"
p.parent.mkdir(exist_ok=True)
p.write_text("Hello, Python!", encoding="utf-8")
代码结束。
这段代码完成了三件事:
定位 data/result.txt;
确保 data 目录存在;
把文本写入文件。
相比手动拼字符串,Path 对象更清晰,也更不容易写错路径分隔符。
常用方法还包括:
glob():按规则查找文件。
iterdir():遍历目录内容。
exists():判断路径是否存在。
read_text():读取文本文件。
write_text():写入文本文件。
调试阶段用 print 很方便。
但项目一旦变复杂,print 就会开始失控:
不知道信息级别;
不方便写入文件;
上线前删来删去;
出错后很难追踪上下文。
logging 更适合做正式日志。
它支持 DEBUG、INFO、WARNING、ERROR、CRITICAL 等不同级别,也可以把日志写到文件中。
代码开始:
import logging
logging.basicConfig(
level=logging.INFO,
filename="app.log",
format="%(asctime)s %(levelname)s: %(message)s"
)
logging.info("程序启动")
代码结束。
运行后,日志会按指定格式写入 app.log。
当你想排查程序什么时候启动、哪里报错、执行到了哪一步时,logging 会比 print 稳太多。
很多脚本最开始只是临时工具。
后来参数越来越多,就开始在 sys.argv 里手动拆字符串。
这种写法很容易乱。
argparse 可以帮你优雅地处理命令行参数。
它自带帮助说明,支持默认值、必填参数、可选参数和类型转换。
代码开始:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("input", help="输入文件路径")
parser.add_argument("-o", "--output", default="out.txt")
args = parser.parse_args()
print(args.input, args.output)
代码结束。
运行:
python script.py -h
命令行会自动生成帮助说明。
这对经常写数据处理脚本、自动化脚本的人非常实用。
Python 标准库里藏着很多好东西。
其中 collections 和 itertools 是非常值得熟悉的两组工具。
collections 提供了很多增强型数据结构,例如:
Counter:计数器。
defaultdict:带默认值的字典。
deque:高效双端队列。
namedtuple:轻量级结构化对象。
比如统计列表中出现最多的元素:
代码开始:
from collections import Counter
words = ["apple", "banana", "apple", "pear"]
print(Counter(words).most_common(1))
代码结束。
输出结果:
[("apple", 2)]
itertools 则适合处理迭代任务。
常见工具包括:
chain:拼接多个可迭代对象。
groupby:按规则分组。
combinations:生成组合。
product:生成笛卡尔积。
用好这两个库,可以少写很多临时变量和嵌套循环。
如果你要批量请求网页、处理文件、下载数据,串行执行通常很慢。
自己写 threading 或 multiprocessing 又容易写复杂。
concurrent.futures 提供了更统一的并发接口。
如果是 I/O 密集任务,可以用 ThreadPoolExecutor。
代码开始:
from concurrent.futures import ThreadPoolExecutor
with ThreadPoolExecutor(max_workers=5) as pool:
futures = [pool.submit(fetch, url) for url in urls]
for future in futures:
print(future.result())
代码结束。
如果是 CPU 密集任务,可以考虑 ProcessPoolExecutor。
这套接口的好处是:
提交任务简单;
获取结果统一;
线程池和进程池切换成本低。
写项目时,不建议把所有配置都硬编码在代码里。
更好的方式是把配置放在 JSON 或 YAML 文件中。
json 是 Python 标准库,适合数据交换。
yaml 通常通过 PyYAML 使用,适合写配置文件,可读性更强。
代码开始:
import json
import yaml
data = {
"name": "Alice",
"age": 30
}
# JSON
s1 = json.dumps(data, ensure_ascii=False, indent=2)
# YAML
s2 = yaml.safe_dump(data, allow_unicode=True)
代码结束。
如果你要和前端、接口服务、其他语言交互,JSON 很常见。
如果你要写项目配置、任务参数、模型参数,YAML 往往更舒服。
长时间运行的脚本,如果没有任何提示,用户体验会很差。
tqdm 可以给循环加进度条。
代码开始:
from tqdm import tqdm
for i in tqdm(range(10000)):
process(i)
代码结束。
只需要包一层 tqdm,就能看到进度、耗时和预计剩余时间。
colorama 则可以给命令行输出加颜色。
代码开始:
from colorama import Fore
print(Fore.GREEN + "成功!" + Fore.RESET)
代码结束。
绿色表示成功,黄色表示警告,红色表示错误。
对于命令行工具、自动化脚本、批处理任务来说,这种反馈非常实用。
如果你经常处理文件:
优先熟悉 pathlib。
如果你在写长期运行的脚本:
尽早用 logging 替代 print。
如果你的脚本需要别人运行:
用 argparse 管好参数。
如果你经常写循环、计数、组合逻辑:
多看看 collections 和 itertools。
如果任务可以并发执行:
试试 concurrent.futures。
如果项目配置开始变多:
把 json 和 yaml 用起来。
如果脚本运行时间较长:
用 tqdm 和 colorama 给用户清晰反馈。
这 7 组 Python 库不一定复杂,但非常实用:
pathlib 让文件操作更清晰。
logging 让调试和线上追踪更可靠。
argparse 让脚本更像正式工具。
collections 和 itertools 让数据处理更优雅。
concurrent.futures 让并发任务更容易落地。
json 和 yaml 让配置与数据交换更规范。
tqdm 和 colorama 让命令行体验更友好。
它们就像 Python 开发中的常用工具箱。
不需要一次全部掌握,但每用熟一个,代码体验都会明显提升。

长按或扫描下方二维码,免费获取 Python公开课和大佬打包整理的几百G的学习资料,内容包含但不限于Python电子书、教程、项目接单、源码等等
▲扫描二维码-免费领取
推荐阅读
点击 阅读原文了解更多