跳转至

Python 入门 / Python 内置库

Python 安装后自带大量模块,统称为“标准库”。本板块沿用“内置库”的导航名称,但标准库与 print()len() 等无需导入的内置函数不是同一概念。

标准库无需使用 pip 安装,导入后即可使用。完整接口请参考 Python 3.11 标准库

1. JSON(json

json 模块用于在 Python 对象和 JSON 文本之间转换:

操作 方法 结果
Python 对象转 JSON 字符串 json.dumps() str
JSON 字符串转 Python 对象 json.loads() dictlist
Python 对象写入 JSON 文件 json.dump() 写入文件对象
从 JSON 文件读取 Python 对象 json.load() dictlist
Python
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
import json

user = {
    'name'  : 'Tom',
    'age'   : 25,
    'roles' : ['developer', 'writer'],
    'active': True,
}

text = json.dumps(user, ensure_ascii=False, indent=2)
print(text)

parsed = json.loads(text)
print(parsed['roles'][0])

输出:

Text Output
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
{
  "name": "Tom",
  "age": 25,
  "roles": [
    "developer",
    "writer"
  ],
  "active": true
}
developer

ensure_ascii=False 让中文等非 ASCII 字符直接保留;indent=2 让结果便于阅读。需要紧凑传输时可以省略缩进,并使用 separators=(',', ':')

JSON 只支持有限的数据类型。Python 的集合、字节、日期时间和自定义对象不能直接序列化,需要先转换为字符串、列表或字典等兼容结构。

2. 正则表达式(re

正则表达式适合处理具有明确文本模式的数据。简单的前缀、后缀、包含和替换需求,应优先使用字符串方法。

Python
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import re

text = 'order-20260811'

match = re.search(r'\d+', text)
if match:
    print('找到数字:', match.group())

print('完整匹配:', bool(re.fullmatch(r'order-\d{8}', text)))
print('替换数字:', re.sub(r'\d+', '<date>', text))
print('提取数字:', re.findall(r'\d+', 'a1 b22 c333'))

输出:

Text Output
1
2
3
4
找到数字: 20260811
完整匹配: True
替换数字: order-<date>
提取数字: ['1', '22', '333']

正则表达式通常写成原始字符串 r'...',避免反斜杠被 Python 字符串提前转义。用户输入不应直接拼入正则表达式;需要按普通文本匹配时,先使用 re.escape()

完整语法请参考 re 官方文档

3. 日期与时间(datetimezoneinfotime

3.1 解析和格式化日期时间

datetime 适合表示、解析、格式化和计算日期时间:

Python
1
2
3
4
5
6
7
from datetime import datetime, timedelta

created_at = datetime.fromisoformat('2026-08-11T10:30:00+08:00')

print(created_at.isoformat())
print(created_at.strftime('%Y-%m-%d %H:%M:%S'))
print((created_at + timedelta(days=1)).date())

输出:

Text Output
1
2
3
2026-08-11T10:30:00+08:00
2026-08-11 10:30:00
2026-08-12

3.2 处理时区

需要明确时区时,使用 zoneinfo.ZoneInfo。不要把不带时区的日期时间直接当作北京时间或 UTC:

Python
1
2
3
4
5
6
7
from datetime import datetime
from zoneinfo import ZoneInfo

utc_time      = datetime(2026, 8, 11, 2, 30, tzinfo=ZoneInfo('UTC'))
shanghai_time = utc_time.astimezone(ZoneInfo('Asia/Shanghai'))

print(shanghai_time.isoformat())

输出:

Text Output
1
2026-08-11T10:30:00+08:00

3.3 Unix 时间戳

time.time() 返回当前 Unix 时间戳,单位为秒;具体值每次运行都不同:

Python
1
2
3
4
5
6
7
import time

timestamp_seconds      = time.time()
timestamp_milliseconds = int(timestamp_seconds * 1000)

print(type(timestamp_seconds))
print(type(timestamp_milliseconds))

输出:

Text Output
1
2
<class 'float'>
<class 'int'>

Unix 时间戳表示从 UTC 的 1970-01-01 00:00:00 起经过的时间,本身不携带时区。只有显示为本地时间时才需要指定时区。

4. 路径(pathlib

pathlib 使用对象表示路径,通常比手工拼接字符串或直接使用 os.path 更直观:

Python
1
2
3
4
5
6
7
8
9
from pathlib import PurePosixPath

path = PurePosixPath('/data/sample/report.json')

print('文件名:', path.name)
print('文件主名:', path.stem)
print('扩展名:', path.suffix)
print('父目录:', path.parent)
print('新路径:', path.parent / 'archive' / path.name)

输出:

Text Output
1
2
3
4
5
文件名: report.json
文件主名: report
扩展名: .json
父目录: /data/sample
新路径: /data/sample/archive/report.json

处理真实文件和目录时使用 Path

Python
1
2
3
4
5
6
7
from pathlib import Path

config_path = Path('/data/config.json')

if config_path.is_file():
    text = config_path.read_text(encoding='utf-8')
    print(text)

路径是否存在、文件内容和权限取决于运行环境。读取外部传入的路径前,应确认它位于允许访问的目录中。

5. 数学(math

math 提供常见的数学常量和函数:

Python
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
import math

print('圆周率:', math.pi)
print('向上取整:', math.ceil(1.2))
print('向下取整:', math.floor(1.9))
print('平方根:', math.sqrt(100))
print('2 的 10 次方:', math.pow(2, 10))
print('以 2 为底的对数:', math.log(1024, 2))
print('45 度对应的弧度:', math.radians(45))
print('π/4 弧度对应的角度:', math.degrees(math.pi / 4))

输出:

Text Output
1
2
3
4
5
6
7
8
圆周率: 3.141592653589793
向上取整: 2
向下取整: 1
平方根: 10.0
2 的 10 次方: 1024.0
以 2 为底的对数: 10.0
45 度对应的弧度: 0.7853981633974483
π/4 弧度对应的角度: 45.0

需要数组、矩阵或大规模数值计算时,通常应使用 NumPy 等专用第三方库。

6. 随机数(randomsecrets

random 适合模拟、抽样和测试:

Python
1
2
3
4
5
6
7
8
import random

items = ['a', 'b', 'c', 'd']

print(random.choice(items))
print(random.sample(items, 2))
print(random.randint(1, 10))
print(random.randrange(0, 10, 2))

上述结果每次运行都可能不同:

  • choice() 从序列中选择一个元素。
  • sample() 不重复地选择指定数量的元素。
  • randint(1, 10) 包含上下限,可能返回 110
  • randrange(0, 10, 2)02468 中选择。

测试需要可复现的伪随机结果时,可以创建独立生成器并指定种子:

Python
1
2
3
4
import random

rng = random.Random(42)
print([rng.randint(1, 10) for _ in range(3)])

输出:

Text Output
1
[2, 1, 5]

random 不适合生成密码、验证码、访问令牌等安全数据;此类场景应使用 secrets 模块

Python
1
2
3
4
import secrets

token = secrets.token_urlsafe(24)
print(type(token))

7. Base64(base64

Base64 将二进制数据表示为 ASCII 文本。它是编码方式,不是加密方式,不能用于隐藏敏感信息。

Python
1
2
3
4
5
6
7
8
import base64

text    = 'Hello, Python!'
encoded = base64.b64encode(text.encode('utf-8')).decode('ascii')
decoded = base64.b64decode(encoded).decode('utf-8')

print(encoded)
print(decoded)

输出:

Text Output
1
2
SGVsbG8sIFB5dGhvbiE=
Hello, Python!

b64encode()b64decode() 处理 bytes,因此字符串编码前需要 encode(),解码后需要 decode()。URL 或文件名中使用时,可以选择 urlsafe_b64encode()urlsafe_b64decode(),它们会替换标准 Base64 字母表中的 +/

8. 哈希(hashlib

哈希函数将任意长度的数据转换为固定长度的摘要,常用于完整性校验:

Python
1
2
3
4
5
6
import hashlib

content = 'Hello, Python!'.encode('utf-8')
digest  = hashlib.sha256(content).hexdigest()

print(digest)

hexdigest() 返回十六进制字符串。相同输入会得到相同摘要,输入发生任何变化通常都会得到不同摘要。

MD5 和 SHA-1 已不适合安全敏感场景;存储密码也不能只做一次普通哈希,应使用专门的密码哈希算法和成熟实现

9. 下一步

标准库无法覆盖所有需求。接下来阅读 Python 入门 / Python 第三方库,学习如何安装并使用项目依赖。