下载工作台
Python 编程实战

标准库实战:os、json、datetime、re

试读上半部分 · 解锁后可读全文

第 9 章 · 标准库:os / json / datetime / re

本章目标:使用 ospathlib 操作路径与环境变量;用 json 读写配置与 API 数据;掌握 datetime 日期时间计算与格式化;用 re 做日志与文本提取;完成 shop-demo 配置 JSON 与访问日志解析练习。

学时建议:4~5 小时(含 1.5 小时跟练)

前置ch08 文件与异常。


9.1 os 模块

import os
from pathlib import Path

print(os.getcwd())                    # 当前工作目录
# os.chdir("/tmp")                    # 切换目录(慎用)

env = os.environ.get("USER", "user-demo")
print(env)

data_dir = Path(os.path.expanduser("~/python-learn/shop-demo"))
data_dir.mkdir(parents=True, exist_ok=True)

for name in os.listdir(data_dir):
    print(name)
函数/属性说明
os.getcwd()当前目录
os.environ环境变量字典
os.path.join(a, b)拼接路径(旧式,推荐 pathlib)
os.listdir(path)列出目录项
os.rename(src, dst)重命名
# 遍历目录树
for root, dirs, files in os.walk(data_dir):
    for fname in files:
        if fname.endswith(".log"):
            print(Path(root) / fname)

9.2 json 模块

import json
from pathlib import Path

config = {
    "shop": "shop-demo",
    "currency": "CNY",
    "members": ["user-demo", "guest-001"],
    "tax_rate": 0.06,
}

path = Path("config.json")
path.write_text(
    json.dumps(config, ensure_ascii=False, indent=2),
    encoding="utf-8",
)

loaded = json.loads(path.read_text(encoding="utf-8"))
print(loaded["shop"])
函数作用
json.dumps(obj)Python → 字符串
json.loads(s)字符串 → Python
json.dump / json.load与文件对象配合

类型对应

PythonJSON
dictobject
listarray
strstring
int/floatnumber
True/Falsetrue/false
Nonenull
# datetime 等需自定义序列化(选修)
def default(o):
    if isinstance(o, datetime):
        return o.isoformat()
    raise TypeError

9.3 datetime 模块

from datetime import datetime, date, timedelta, timezone

now = datetime.now()
today = date.today()
print(now.strftime("%Y-%m-%d %H:%M:%S"))

parsed = datetime.strptime("2026-08-19 10:30:00", "%Y-%m-%d %H:%M:%S")
deadline = parsed + timedelta(days=7)

delta = deadline - now
print(delta.days)
类型用途
date年月日
time时分秒
datetime日期+时间
timedelta时间差

常用格式码

含义
%Y四位年
%m
%d
%H时(24h)
%M
%S
# UTC 时间(接口常见)
utc_now = datetime.now(timezone.utc)

9.4 re 正则表达式

import re

log = "2026-08-19 10:32:01 GET /api/books status=200 ms=45"
pattern = r"(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}).*status=(\d+).*ms=(\d+)"
m = re.search(pattern, log)
if m:
    ts, status, ms = m.groups()
    print(ts, status, ms)
函数说明
re.search首个匹配
re.findall所有非重叠匹配
re.sub替换
re.compile预编译,重复用

以下内容需解锁后阅读

试读已结束。解锁本章 ¥5.00,或开通年度会员畅读全部教程。
年度会员 ¥199.00/年; 小紫 AI 工作台有效会员 ¥99.00/年

正文仅在服务端鉴权后下发,未付费无法获取下半部分内容。