跳过正文
Python 标准库
  1. Blog/

Python 标准库

·2157 字·5 分钟
目录
Python - 这篇文章属于一个选集。
§ 9: 本文

Python 为开发者提供功能极其丰富且经过严格测试的标准库。在处理网络通信、文件操作、数据处理等无数常见任务时,无需寻找和安装第三方库,可以直接利用 Python 内置的强大工具。
官方文档:https://docs.python.org/zh-cn/3.11/library/index.html

操作系统与文件系统接口
#

这类模块是编写与操作系统交互的脚本和应用的基础。

ospathlib:与文件系统对话
#

  • 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 归档文件。

数学与数值计算
#

mathrandom
#

  • math: 提供了对 C 语言标准定义的数学函数的访问,如 math.sin(), math.log(), math.sqrt() 以及 math.pimath.e 等常数。
  • random: 实现了各种分布的伪随机数生成器。
    • random.random(): 返回 [0.0, 1.0) 范围内的随机浮点数。
    • random.randint(a, b): 返回一个 [a, b] 范围内的随机整数。
    • random.choice(seq): 从一个非空序列中随机选择一个元素。
    • random.shuffle(x): 对序列 x 进行原地随机排序。
    • 注意random 模块不应用于密码学安全相关的场景。应使用 secrets 模块。

高精度计算:decimalfractions
#

标准浮点数(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) 协议的客户端,用于发送邮件。

开发工具与调试
#

unittestdoctest:自动化测试
#

  • 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()),然后进入一个交互式环境,检查变量、单步执行代码。

Python - 这篇文章属于一个选集。
§ 9: 本文