Skip to content

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"):    # 通配查找
    pass

datetime 速查

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.y

itertools 迭代工具

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)              # 退出并带状态码

常见坑

  1. 中文读写忘 encoding="utf-8":Windows 默认 GBK,中文会乱码/报错——读写都显式指定
  2. open() 不关文件泄漏句柄:永远用 with open(...)
  3. json 中文变 \uXXXXjson.dumpsensure_ascii=False
  4. os.path vs pathlib 混用:新代码统一用 pathlib,别混
  5. strptime 格式串写错%Y(年)、%m(月)、%d(日)、%H:%M(时分)——与 %y 区分
  6. 正则没加 r 前缀"\d" 会被当转义字符处理,报错或行为诡异——一律 r"\d"

一句话总结

文件 IO 的唯一正解是 with open(..., encoding="utf-8"),Windows 下漏写 encoding 必乱码;json.dumpsensure_ascii=False 才不转义中文,正则一律加 r 前缀。

相关概念