Python 为开发者提供功能极其丰富且经过严格测试的标准库。在处理网络通信、文件操作、数据处理等无数常见任务时,无需寻找和安装第三方库,可以直接利用 Python 内置的强大工具。
官方文档:https://docs.python.org/zh-cn/3.11/library/index.html
操作系统与文件系统接口#
这类模块是编写与操作系统交互的脚本和应用的基础。
os 与 pathlib:与文件系统对话#
os模块: 提供了与操作系统进行交互的底层接口。os.getcwd(): 获取当前工作目录。os.chdir(path): 更改当前工作目录。os.environ: 一个表示环境变量的字典。os.path子模块: 包含了处理路径名的核心函数,是跨平台编程的关键。os.path.join(path, *paths): 强烈推荐。智能地拼接一个或多个路径部分,自动使用适合当前操作系统的路径分隔符 (/或\\)。os.path.exists(path): 判断路径是否存在。os.path.splitext(path): 分离文件名和扩展名。
pathlib模块 (Python 3.4+ 的现代选择):pathlib提供了面向对象的接口来处理文件系统路径,代码更具表现力且更符合 Pythonic 风格。在现代 Python 开发中,应优先使用pathlib而不是os.path。from pathlib import Path # 传统方式 (os.path) # import os # cwd = os.getcwd() # file_path = os.path.join(cwd, 'data', 'config.json') # 现代方式 (pathlib) p = Path.cwd() / 'data' / 'config.json' # 使用 / 运算符自然地拼接路径 print(f"Path exists: {p.exists()}") print(f"Parent directory: {p.parent}") print(f"File name: {p.name}") print(f"File stem: {p.stem}") # 'config' print(f"File suffix: {p.suffix}") # '.json' # 轻松读取和写入文件 # p.write_text("Hello, world!", encoding='utf-8') # content = p.read_text(encoding='utf-8')
shutil:高级文件操作#
shutil 模块提供了对文件和文件集合的高级操作,是对 os 模块的补充。
shutil.copyfile(src, dst): 复制文件内容(不包括元数据)。shutil.copytree(src, dst): 递归地复制整个目录树。shutil.move(src, dst): 移动文件或目录。shutil.rmtree(path): 递归地删除整个目录树。
sys:与 Python 解释器交互#
sys 模块能够访问由解释器使用或维护的变量,并与解释器进行交互。
sys.argv: 命令行参数列表,其中sys.argv[0]是脚本本身的名称。sys.path: 一个字符串列表,指定了模块的搜索路径。sys.platform: 标识当前操作系统平台(如'win32','linux','darwin')。sys.exit(): 退出 Python 程序。
数据处理与持久化#
文本处理:re (正则表达式)#
re 模块是 Python 进行复杂文本模式匹配和处理的利器。
re.search(pattern, string): 在字符串中搜索模式的第一次出现。re.match(pattern, string): 从字符串的开头匹配模式。re.findall(pattern, string): 找到所有不重叠的匹配项,并以列表形式返回。re.sub(pattern, repl, string): 查找并替换。re.compile(pattern): 将一个正则表达式模式编译成一个模式对象,当一个模式需要被重复使用时,这可以极大地提高性能。
import re
# 从文本中提取所有邮箱地址
text = "Contact us at support@example.com or sales@example.org."
emails = re.findall(r'[\\w\\.-]+@[\\w\\.-]+', text)
print(emails) # -> ['support@example.com', 'sales@example.org']
结构化数据:json, csv, sqlite3#
json: 用于处理 JSON (JavaScript Object Notation) 数据。是现代 Web API 和配置文件中最通用的数据交换格式。json.dumps(obj): 将 Python 对象序列化为 JSON 格式的字符串。json.loads(s): 将 JSON 格式的字符串反序列化为 Python 对象。json.dump(obj, fp)/json.load(fp): 直接与文件对象进行读写。
csv: 用于读写 CSV (Comma-Separated Values) 文件。csv.reader: 逐行读取 CSV 文件,每行返回一个字符串列表。csv.DictReader: 更推荐。逐行读取,每行返回一个字典,将标题行的值作为键。
sqlite3: 一个实现了轻量级、无需服务器的 SQL 数据库引擎的接口。它允许在一个单一的文件中创建和管理一个完整的关系型数据库。
数据压缩:zlib, gzip, bz2, zipfile#
标准库提供了处理多种数据压缩格式的模块,允许直接读写压缩文件。
gzip: 用于处理.gz文件。zipfile: 用于处理.zip归档文件。
数学与数值计算#
math 与 random#
math: 提供了对 C 语言标准定义的数学函数的访问,如math.sin(),math.log(),math.sqrt()以及math.pi和math.e等常数。random: 实现了各种分布的伪随机数生成器。random.random(): 返回 [0.0, 1.0) 范围内的随机浮点数。random.randint(a, b): 返回一个 [a, b] 范围内的随机整数。random.choice(seq): 从一个非空序列中随机选择一个元素。random.shuffle(x): 对序列x进行原地随机排序。- 注意:
random模块不应用于密码学安全相关的场景。应使用secrets模块。
高精度计算:decimal 与 fractions#
标准浮点数(float)存在精度问题(例如 0.1 + 0.2 并不精确等于 0.3)。这两个模块解决了这个问题。
decimal: 实现了定点和浮点数运算,精度可由用户指定。在金融和货币计算等要求精确十进制表示的场景中至关重要。fractions: 实现了有理数算术,可以精确地表示分数。
from decimal import Decimal
# 浮点数的不精确性
print(0.1 + 0.2) # -> 0.30000000000000004
# Decimal 的精确性
print(Decimal('0.1') + Decimal('0.2')) # -> 0.3
日期与时间:datetime#
datetime 模块提供了用于处理日期和时间的类。
- 核心对象:
date,time,datetime,timedelta(表示两个日期或时间之间的差)。 - 常用操作:
datetime.datetime.now(): 获取当前的本地日期和时间。strftime(): 将datetime对象格式化为字符串。strptime(): 将字符串解析为datetime对象。- 使用
timedelta进行日期算术。
from datetime import datetime, timedelta
now = datetime.now()
print(f"Current time: {now.strftime('%Y-%m-%d %H:%M:%S')}")
three_days_ago = now - timedelta(days=3)
print(f"Three days ago was: {three_days_ago.date()}")
网络与互联网#
urllib.request:访问网络资源#
提供了获取 URL 资源的基础接口。
# from urllib.request import urlopen
# with urlopen('<http://worldtimeapi.org/api/ip>') as response:
# body = response.read()
# print(json.loads(body))
📌 实践建议: 虽然 urllib 功能齐全,但其 API 相对复杂。在实际项目中,绝大多数开发者会选择使用第三方库 requests,它提供了极其简洁和人性化的 API 来处理 HTTP 请求。但了解 urllib 仍然是理解底层网络操作的基础。
smtplib:发送电子邮件#
实现了 SMTP (Simple Mail Transfer Protocol) 协议的客户端,用于发送邮件。
开发工具与调试#
unittest 与 doctest:自动化测试#
unittest: Python 的官方测试框架,其风格类似于 Java 的 JUnit。它提供了丰富的断言方法和测试组织结构(测试用例、测试套件)。doctest: 一个独特的模块,它会在文档字符串 (docstring) 中搜索看起来像交互式 Python 会话的文本,然后执行这些会话来验证代码。
logging:日志记录#
logging 模块是 Python 的标准日志记录工具,远比 print() 语句强大。
- 五种日志级别:
DEBUG,INFO,WARNING,ERROR,CRITICAL。 - 灵活性: 可以将日志输出到控制台、文件、网络套接字等。
- 配置化: 可以通过配置来控制日志的格式、级别和输出目标。
pdb:Python 调试器#
pdb 模块为 Python 程序提供了一个交互式的源代码调试器。可以在代码的任何位置设置断点 (import pdb; pdb.set_trace()),然后进入一个交互式环境,检查变量、单步执行代码。