Appearance
Python 常用标准库速查:文件读写、json、os/pathlib 路径操作、datetime 时间、re 正则、collections 高级容器、itertools。日常写脚本 90% 的模块需求都在这,看完即用。
文件与输入输出
python
# === 读文件(首选 with,自动关闭)===
with open("data.txt", "r", encoding="utf-8") as f:
text = f.read() # 全部
lines = f.readlines() # 按行列表
for line in f: # 逐行(大文件省内存)
pass
# === 写文件 ===
with open("out.txt", "w", encoding="utf-8") as f: # w覆盖/a追加
f.write("内容\n")
print("内容", file=f) # print 定向到文件
# === 读写模式 ===
# "r"读 "w"写(覆盖) "a"追加 "rb"/"wb"二进制 "r+"读写json 速查(数据交换标配)
python
import json
data = {"name": "张三", "age": 30, "tags": ["a", "b"]}
s = json.dumps(data, ensure_ascii=False, indent=2) # 转字符串(保中文)
data2 = json.loads(s) # 字符串转对象
json.dump(data, open("data.json", "w", encoding="utf-8")) # 写文件
data3 = json.load(open("data.json", "r", encoding="utf-8")) # 读文件os 与 pathlib(路径与系统)
python
import os
os.getcwd() # 当前目录
os.listdir(".") # 列出目录
os.makedirs("a/b", exist_ok=True) # 递归建目录(不报错)
os.path.join("a", "b") # 'a\\b' 跨平台拼接
os.path.exists(path) # 是否存在
os.path.isfile / os.path.isdir
os.path.splitext("x.py") # ('x', '.py')
# 现代推荐 pathlib(更直观)
from pathlib import Path
p = Path("data/out.txt")
p.exists() / p.is_file()
p.read_text(encoding="utf-8") # 直接读
p.write_text("内容", encoding="utf-8") # 直接写
p.parent / "other.txt" # 路径拼接用 /
p.suffix # '.txt'
p.name / p.stem # 'out.txt' / 'out'
Path("a/b").mkdir(parents=True, exist_ok=True)
for f in Path(".").glob("*.py"): # 通配查找
passdatetime 速查
python
from datetime import datetime, date, timedelta
now = datetime.now() # 当前时间
now.strftime("%Y-%m-%d %H:%M") # 格式化 → '2026-09-09 19:30'
datetime.strptime("2026-09-09", "%Y-%m-%d") # 字符串解析
now + timedelta(days=7) # 日期运算
now.date() / now.time()
now.timestamp() # 转时间戳re 正则速查
python
import re
re.findall(r"\d+", "a1b22c333") # ['1','22','333'] 找全部
re.search(r"\d+", "abc123") # 第一个匹配(对象或 None)
re.match(r"\d+", "123abc") # 从开头匹配
re.sub(r"\d+", "#", "a1b2") # 替换 → 'a#b#'
re.split(r"[,;]", "a,b;c") # 分割 → ['a','b','c']
# 常用模式
# \d 数字 \w 字母数字下划线 \s 空白 . 任意字符
# + 一次以上 * 零次以上 ? 零或一次 {2,3} 2到3次
# [abc] 字符集 (x|y) 分组 ^ 开头 $ 结尾
# 匹配前加 r 前缀:r"\d+"(原始字符串,反斜杠不转义)collections 高级容器
python
from collections import Counter, defaultdict, deque, namedtuple
Counter("aabbc") # Counter({'a':2,'b':2,'c':1}) 计数
Counter(lst).most_common(2) # 前2高频
dd = defaultdict(list) # 取不存在键自动建空 list
dd["k"].append(1) # 不用先判存在
dq = deque([1,2,3]) # 双端队列
dq.appendleft(0) / dq.popleft() # O(1) 两端操作
Point = namedtuple("Point", ["x", "y"]) # 轻量类
p = Point(1, 2); p.x / p.yitertools 迭代工具
python
import itertools
itertools.chain([1,2],[3,4]) # 连接迭代
itertools.product([1,2],[3,4]) # 笛卡尔积
itertools.permutations("ABC") # 排列
itertools.combinations("ABC", 2) # 组合
itertools.groupby(sorted(lst, key=key), key=key) # 分组其他高频模块
python
import random, math, sys
random.randint(1, 100) # 随机整数
random.choice(lst) # 随机选一个
random.shuffle(lst) # 洗牌
math.sqrt / math.ceil / math.floor / math.pi
sys.argv # 命令行参数(argv[0]=脚本名)
sys.exit(1) # 退出并带状态码常见坑
- 中文读写忘
encoding="utf-8":Windows 默认 GBK,中文会乱码/报错——读写都显式指定 open()不关文件泄漏句柄:永远用with open(...)- json 中文变
\uXXXX:json.dumps加ensure_ascii=False os.pathvspathlib混用:新代码统一用 pathlib,别混strptime格式串写错:%Y(年)、%m(月)、%d(日)、%H:%M(时分)——与%y区分- 正则没加
r前缀:"\d"会被当转义字符处理,报错或行为诡异——一律r"\d"
一句话总结
文件 IO 的唯一正解是 with open(..., encoding="utf-8"),Windows 下漏写 encoding 必乱码;json.dumps 加 ensure_ascii=False 才不转义中文,正则一律加 r 前缀。