传说中的“自带电池”(Batteries Included)
在编程界,Python 最具赞誉的特色之一就是它的“自带电池(Batteries Included)”哲学。这意味着当你安装好 Python 解释器时,你已经免费获得了一个极其庞大、经过严格测试且跨平台兼容的官方标准库(Standard Library)。
无需安装任何第三方插件,只要写一行 import 模块名,你就能直接调用操作系统底层功能、抓取互联网网页、计算精确日期时间、压缩文件甚至执行单元测试!
在官方教程第 10 章中,我们将快速巡礼最常用的一组系统接口与核心工具模块。
1. 操作系统接口:os 与 shutil
要与当前电脑的操作系统进行交互(比如查看当前目录、执行系统命令或移动文件),使用 os 模块:
>>> import os
>>> os.getcwd() # 返回当前工作目录 (Current Working Directory)
'/Users/gravity/Desktop'
>>> os.chdir('/tmp') # 改变当前工作目录
>>> os.system('mkdir today') # 在系统 shell 中运行命令
最佳实践提示: 应该使用
import os,而绝不要使用from os import *。因为os模块中包含一个名为open()的底层函数,如果盲目星号导入,它会把 Python 内置的文件读写函数open()彻底覆盖掉!
对于日常高级的日常文件和目录管理任务(如拷贝、重命名、删除整个目录树),标准库推荐使用更高层级的 shutil 模块:
import shutil
shutil.copyfile('data.db', 'archive.db')
shutil.move('/src/dir', '/dst/dir')
2. 文件通配符:glob
在做批量数据或文本处理时,我们经常需要找出某个文件夹下符合特定规则的一批文件(比如“所有的 .txt 文件”)。glob 模块提供了基于通配符(通配符 Wildcards)的文件名查找函数:
>>> import glob
>>> glob.glob('*.py')
['primes.py', 'fibo.py', 'text_analyzer.py']
它会返回符合模式匹配的文件名字符串列表。
3. 命令行参数:sys 模块
很多生产脚本需要通过命令行接受用户传入的参数,例如:
python script.py data.txt --verbose
这些参数会被解释器自动解析并存放在 sys.argv 列表中:
import sys
print(sys.argv)
如果在终端运行 python demo.py one two three,sys.argv 的值会是:
['demo.py', 'one', 'two', 'three']
sys.argv[0]:始终是当前被执行的脚本名字;sys.argv[1]、sys.argv[2]…:依次是命令行后方传入的具体参数。
此外,sys 模块还提供了 sys.stderr.write('错误信息\n') 用于向标准错误流输出告警,以及 sys.exit(0) 用于随时安全终止程序。
4. 字符串模式匹配:re 模块
对于复杂的文本提取、校验(如验证邮箱、手机号或提取特定规律的单词),标准库提供了功能强大的正则表达式(regular expressions)模块 re:
>>> import re
>>> re.findall(r'\bf[a-z]*', 'which foot or hand fell fastest')
['foot', 'fell', 'fastest']
>>> re.sub(r'(\b[a-z]+) \1', r'\1', 'cat in the the hat')
'cat in the hat'
如果仅仅是简单的字符串查找与替换,优先使用上一关学过的字符串原生方法(如 'word' in text 或 text.replace()),因为它们更加直观且性能更优。
5. 数学计算与随机抽样:math 与 random
math 模块:基础数学运算
底层 C 语言精度的浮点数学库:
>>> import math
>>> math.cos(math.pi / 4)
0.7071067811865476
>>> math.log(1024, 2)
10.0
random 模块:随机数与概率工具
用于生成随机数、随机洗牌和概率抽样:
>>> import random
>>> random.choice(['apple', 'pear', 'banana']) # 随机挑一个
'apple'
>>> random.sample(range(100), 10) # 不重复随机采样 10 个
[30, 83, 16, 4, 8, 81, 41, 50, 18, 33]
>>> random.random() # 生成 [0.0, 1.0) 随机浮点数
0.17970987693706186
6. 互联网访问:urllib.request
在 Python 中,访问互联网上的网址并抓取网页数据,甚至不需要安装任何外部库。使用内置的 urllib.request 模块即可直接打开 URL:
from urllib.request import urlopen
with urlopen('http://worldtimeapi.org/api/timezone/etc/UTC.txt') as response:
for line in response:
line = line.decode('utf-8') # 将接收到的二进制字节解码为字符串
if 'datetime' in line:
print(line.rstrip())
7. 日期与时间:datetime 模块
处理现实中的年月日、小时、分钟和时区,使用 datetime 模块。它提供了大量专门支持日期算术(加减天数)与格式化的对象:
>>> from datetime import date
>>> now = date.today()
>>> now
datetime.date(2026, 10, 21)
>>> now.strftime("%m-%d-%y. %d %b %Y is a %A on the %d day of %B.")
'10-21-26. 21 Oct 2026 is a Wednesday on the 21 day of October.'
>>> # 计算生日差距:
>>> birthday = date(1964, 7, 31)
>>> age = now - birthday
>>> age.days
22727
8. 数据压缩:zlib 模块
在处理大型日志或网络传输时,常用的数据打包与解压缩格式由 zlib 模块直接提供支持:
>>> import zlib
>>> s = b'witch which has which witches wrist watch'
>>> len(s)
41
>>> t = zlib.compress(s)
>>> len(t)
37
>>> zlib.decompress(t)
b'witch which has which witches wrist watch'
此外,标准库中还有 gzip、bz2、zipfile 和 tarfile 支持所有主流压缩包的处理。
看完了这组基础系统工具,你是不是已经深刻体会到了 Python 为什么能被称为“全能胶水语言”?在下一关中,我们将探索第 11 章——标准库中更专业的高级工具集!