1. Python标准库概述
Python标准库是这门语言最强大的武器库之一,它随Python解释器默认安装,包含200多个模块,覆盖文件操作、系统交互、数据处理等方方面面。我见过太多开发者习惯性地安装第三方库,却不知道标准库已经提供了现成解决方案。比如用pathlib替代os.path操作文件路径,用collections里的defaultdict处理字典缺省值,这些内置工具往往比第三方实现更高效稳定。
标准库模块大致可分为几类:
- 核心服务:
os、sys、io等系统级接口 - 文本处理:
re、string、json等 - 数据结构:
collections、heapq、bisect等 - 算法工具:
itertools、functools等 - 日期时间:
datetime、time等 - 数据持久化:
pickle、sqlite3等
提示:在PyCharm中按住Ctrl点击模块名可直接跳转到标准库源码,这是学习实现原理的最佳方式
2. 文件系统操作三剑客
2.1 os模块:跨平台系统接口
os模块提供了与操作系统交互的统一接口。比如获取环境变量:
python复制import os
print(os.environ['PATH']) # 获取系统PATH变量
print(os.getcwd()) # 当前工作目录
跨平台路径拼接务必使用os.path.join:
python复制config_path = os.path.join(os.environ['HOME'], '.config', 'myapp.conf')
2.2 pathlib:面向对象的路径操作
Python 3.4引入的pathlib让文件操作更符合直觉:
python复制from pathlib import Path
config_file = Path.home() / '.config' / 'app.ini'
if config_file.exists():
content = config_file.read_text()
相比os.path的字符串拼接,pathlib.Path支持用/运算符连接路径,且所有方法都是链式调用的。
2.3 glob:文件模式匹配
快速查找符合规则的文件:
python复制import glob
py_files = glob.glob('./**/*.py', recursive=True) # 递归查找所有Python文件
3. 数据处理核心工具
3.1 collections:增强型数据结构
defaultdict:自动初始化字典值
python复制from collections import defaultdict
word_count = defaultdict(int)
for word in words:
word_count[word] += 1 # 无需判断key是否存在
Counter:元素计数神器
python复制from collections import Counter
c = Counter('abracadabra')
print(c.most_common(3)) # [('a', 5), ('b', 2), ('r', 2)]
3.2 itertools:迭代器工具集
无限迭代器示例:
python复制import itertools
# 生成等差数列
for i in itertools.count(start=10, step=2):
if i > 20: break
print(i) # 10,12,14,...
# 排列组合
perms = itertools.permutations('ABC', 2) # AB, AC, BA, BC, CA, CB
3.3 functools:高阶函数工具
lru_cache实现记忆化:
python复制from functools import lru_cache
@lru_cache(maxsize=128)
def fib(n):
if n < 2:
return n
return fib(n-1) + fib(n-2)
4. 日期时间处理
4.1 datetime基本使用
python复制from datetime import datetime, timedelta
now = datetime.now()
tomorrow = now + timedelta(days=1)
# 格式化输出
print(now.strftime('%Y-%m-%d %H:%M:%S')) # 2023-07-15 14:30:00
4.2 时区处理
建议始终使用带时区的时间对象:
python复制from datetime import timezone
utc_time = datetime.now(timezone.utc)
local_time = utc_time.astimezone() # 转换为本地时区
5. JSON与数据序列化
5.1 json模块基础
python复制import json
data = {'name': 'Alice', 'age': 25}
json_str = json.dumps(data) # 序列化
loaded = json.loads(json_str) # 反序列化
5.2 高级序列化技巧
处理自定义对象:
python复制class User:
def __init__(self, name, age):
self.name = name
self.age = age
def user_encoder(obj):
if isinstance(obj, User):
return {'name': obj.name, 'age': obj.age}
raise TypeError
user = User('Bob', 30)
print(json.dumps(user, default=user_encoder))
6. 并发编程工具
6.1 threading多线程
python复制import threading
def worker(num):
print(f'Worker: {num}')
threads = []
for i in range(5):
t = threading.Thread(target=worker, args=(i,))
threads.append(t)
t.start()
for t in threads:
t.join()
6.2 multiprocessing多进程
解决GIL限制:
python复制from multiprocessing import Pool
def square(x):
return x * x
with Pool(4) as p:
print(p.map(square, range(10))) # [0,1,4,9,...]
7. 网络编程基础
7.1 urllib.request网络请求
python复制from urllib.request import urlopen
with urlopen('https://example.com') as response:
content = response.read().decode('utf-8')
7.2 socket基础通信
简单TCP服务器:
python复制import socket
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind(('localhost', 65432))
s.listen()
conn, addr = s.accept()
with conn:
data = conn.recv(1024)
conn.sendall(data)
8. 调试与测试工具
8.1 pdb调试器
在代码中插入断点:
python复制import pdb
def buggy_func():
pdb.set_trace() # 运行到这里会进入调试模式
# 调试命令:n(ext), s(tep), l(ist), p(rint)等
8.2 unittest单元测试
python复制import unittest
class TestStringMethods(unittest.TestCase):
def test_upper(self):
self.assertEqual('foo'.upper(), 'FOO')
if __name__ == '__main__':
unittest.main()
9. 隐藏的瑰宝模块
9.1 statistics统计计算
python复制from statistics import mean, stdev
data = [2.75, 1.75, 1.25]
print(mean(data)) # 1.916666...
9.2 zipfile压缩处理
python复制import zipfile
with zipfile.ZipFile('archive.zip', 'r') as z:
z.extractall('extracted')
9.3 csv表格处理
python复制import csv
with open('data.csv') as f:
reader = csv.DictReader(f)
for row in reader:
print(row['name'], row['email'])
10. 标准库使用技巧
- 查看模块文档:在交互环境运行
help(os)或dir(os)快速了解模块功能 - 源码学习:标准库源码位于Python安装目录的
Lib文件夹 - 性能对比:
timeit模块可以精确测量代码执行时间 - 接口兼容:优先使用
subprocess.run()替代旧的os.system() - 类型提示:Python 3.9+推荐用
list[str]代替typing.List[str]
注意:在Windows系统上处理路径时,建议使用
pathlib或os.path.normpath确保路径分隔符正确
我在实际项目中最常用的标准库组合是:
pathlib+shutil:文件操作json+typing:数据序列化与类型检查concurrent.futures:简单并发任务logging:替代print进行调试输出
当遇到问题时,先查标准库文档往往能发现现成的解决方案,这比盲目安装第三方库更可靠。比如需要内存缓存时,functools.lru_cache通常就够用了,不必引入Redis等外部依赖。
