Skip to content

常用工具库

写 Python 程序时,不是所有功能都需要你从零开始造。Python 标准库已经帮你准备了很多常见能力,比如处理 JSON、时间、日志、编码转换等。

对于零基础来说,这一节非常重要。因为很多人学到这里时,会有一个误区:以为学 Python 就只是学变量、条件、循环、函数。实际上,真正写项目时,你几乎一定会接触这些工具库。

比如:

  • 调接口时,你会遇到 JSON
  • 做定时任务时,你会遇到时间和日期
  • 保存程序运行记录时,你会用到日志
  • 处理图片、签名、加密串时,你会遇到 Base64

所以这一节的目标,不是让你把标准库背下来,而是让你知道:常见问题应该去哪里找现成工具。

本节目标

  • 理解什么是标准库
  • 学会使用 json 处理结构化数据
  • 学会使用 timedatetime 处理时间
  • 学会使用 base64 进行编码转换
  • 学会使用 logging 记录日志
  • 知道这些工具库在真实项目中的典型用途

什么是标准库

所谓标准库,你可以把它理解成:Python 安装完成后,系统已经自带的一批常用工具。

它们的特点是:

  • 不需要额外安装
  • 可以直接 import
  • 覆盖很多常见开发场景

例如:

python
import json
import time
import datetime
import base64
import logging

如果导入不报错,说明这些模块本身就已经存在。

json:处理结构化数据

为什么要学 json

JSON 是现在最常见的数据交换格式之一。

你在这些场景里几乎都会遇到它:

  • 浏览器和后端接口交互
  • Python 调用第三方接口
  • 配置文件存储
  • 爬虫抓取接口数据

JSON 和 Python 中的数据结构非常像:

  • JSON 对象很像 Python 字典
  • JSON 数组很像 Python 列表

Python 对象转 JSON 字符串

python
import json

data = {
    "name": "小明",
    "age": 18,
    "skills": ["Python", "Linux", "MySQL"]
}

result = json.dumps(data, ensure_ascii=False)
print(result)
print(type(result))

输出结果:

text
{"name": "小明", "age": 18, "skills": ["Python", "Linux", "MySQL"]}
<class 'str'>

这里的重点是:

  • dumps 中的 s 表示 string
  • 它会把 Python 对象转成 JSON 字符串
  • ensure_ascii=False 可以避免中文被转义成乱码形式

JSON 字符串转 Python 对象

python
import json

text = '{"name": "小明", "age": 18, "skills": ["Python", "Linux"]}'
data = json.loads(text)

print(data)
print(type(data))
print(data["name"])
print(data["skills"][0])

输出结果:

text
{'name': '小明', 'age': 18, 'skills': ['Python', 'Linux']}
<class 'dict'>
小明
Python

保存 JSON 文件

python
import json

data = {
    "site": "Python 学习空间",
    "group": "QQ群号"
}

with open("config.json", "w", encoding="utf-8") as file:
    json.dump(data, file, ensure_ascii=False, indent=2)

print("写入完成")

输出结果:

text
写入完成

生成文件示例:

json
{
  "site": "Python 学习空间",
  "group": "QQ群号"
}

读取 JSON 文件

python
import json

with open("config.json", "r", encoding="utf-8") as file:
    data = json.load(file)

print(data["site"])

输出结果:

text
Python 学习空间

time:处理时间戳和等待

time.time()

它会返回当前时间戳,也就是从某个固定起点开始到现在的秒数。

python
import time

now = time.time()
print(now)
print(type(now))

输出结果示例:

text
1713945600.123456
<class 'float'>

时间戳常见用途:

  • 统计程序耗时
  • 给文件命名
  • 生成简单版本号

time.sleep()

它会让程序暂停一段时间。

python
import time

print("开始")
time.sleep(2)
print("两秒后继续执行")

输出结果:

text
开始
两秒后继续执行

爬虫里常用它做延时,避免请求过快。

统计程序运行耗时

python
import time

start = time.time()

for i in range(3):
    print(f"第 {i + 1} 次执行")
    time.sleep(1)

end = time.time()
print(f"总耗时:{end - start:.2f} 秒")

输出结果:

text
第 1 次执行
第 2 次执行
第 3 次执行
总耗时:3.00 秒

datetime:处理日期和时间对象

如果说 time 更偏底层,那么 datetime 更适合日常业务开发。

获取当前时间

python
from datetime import datetime

now = datetime.now()
print(now)
print(type(now))

输出结果示例:

text
2026-04-24 10:30:15.123456
<class 'datetime.datetime'>

格式化时间

python
from datetime import datetime

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

输出结果示例:

text
2026-04-24 10:30:15

常见格式符:

  • %Y:四位年份
  • %m:月份
  • %d:日期
  • %H:小时
  • %M:分钟
  • %S:秒

字符串转时间对象

python
from datetime import datetime

text = "2026-04-24 08:30:00"
dt = datetime.strptime(text, "%Y-%m-%d %H:%M:%S")

print(dt)
print(type(dt))

输出结果:

text
2026-04-24 08:30:00
<class 'datetime.datetime'>

计算时间差

python
from datetime import datetime

start = datetime.strptime("2026-04-24 08:00:00", "%Y-%m-%d %H:%M:%S")
end = datetime.strptime("2026-04-24 10:30:00", "%Y-%m-%d %H:%M:%S")

delta = end - start
print(delta)
print(delta.total_seconds())

输出结果:

text
2:30:00
9000.0

这在日志分析、订单超时、任务调度里都很常见。

base64:编码转换

Base64 不是加密,它只是把二进制数据转换成文本形式,方便传输。

你会在这些场景中遇到它:

  • 图片转字符串
  • 接口参数传输
  • 某些签名和令牌处理

字符串编码为 Base64

python
import base64

text = "python 学习空间"
encoded = base64.b64encode(text.encode("utf-8"))

print(encoded)
print(encoded.decode("utf-8"))

输出结果示例:

text
b'cHl0aG9uIOWtpuS5oOepuumXtA=='
cHl0aG9uIOWtpuS5oOepuumXtA==

Base64 解码

python
import base64

text = "cHl0aG9uIOWtpuS5oOepuumXtA=="
decoded = base64.b64decode(text)

print(decoded)
print(decoded.decode("utf-8"))

输出结果:

text
b'python \xe5\xad\xa6\xe4\xb9\xa0\xe7\xa9\xba\xe9\x97\xb4'
python 学习空间

logging:记录程序日志

初学者经常用 print() 排错,这没有错,但它不适合正式项目。

为什么?

  • print() 没有级别
  • 不方便统一管理
  • 不方便保存到日志文件

logging 专门用来做这件事。

最简单的日志输出

python
import logging

logging.basicConfig(level=logging.INFO)

logging.debug("这是一条 debug 日志")
logging.info("程序启动成功")
logging.warning("配置文件不存在,使用默认配置")
logging.error("数据库连接失败")

输出结果示例:

text
INFO:root:程序启动成功
WARNING:root:配置文件不存在,使用默认配置
ERROR:root:数据库连接失败

日志级别说明

常见日志级别从低到高大致是:

  • DEBUG:调试信息
  • INFO:普通运行信息
  • WARNING:警告
  • ERROR:错误
  • CRITICAL:严重错误

写入日志文件

python
import logging

logging.basicConfig(
    filename="app.log",
    level=logging.INFO,
    encoding="utf-8",
    format="%(asctime)s %(levelname)s %(message)s"
)

logging.info("程序启动")
logging.warning("当前使用测试环境")
logging.error("发生了一个模拟错误")

print("日志已写入 app.log")

输出结果:

text
日志已写入 app.log

文件内容示例:

text
2026-04-24 10:35:00,123 INFO 程序启动
2026-04-24 10:35:00,124 WARNING 当前使用测试环境
2026-04-24 10:35:00,125 ERROR 发生了一个模拟错误

这些工具库在真实项目中的典型用途

为了避免你学完后还是觉得抽象,这里把它们放回真实项目场景里再看一遍。

场景 1:调用接口

你向某个接口发送请求后,往往会收到 JSON 格式的响应数据。这时你需要用 json 去解析。

场景 2:爬虫延时

你做网页采集时,不可能每秒发几百个请求,否则很容易被封。这时会用 time.sleep() 控制节奏。

场景 3:记录程序运行状态

你的网站、爬虫、自动任务运行时,不可能一直盯着屏幕看,所以需要 logging 把执行过程记下来。

场景 4:处理日期时间

订单创建时间、日志时间、文章发布时间、数据更新时间,这些都离不开 datetime

场景 5:图片和字符串转换

某些接口会把图片或文件内容转成一大段字符串传输,这时经常会遇到 base64

常见错误

1. 把 Python 字典当成 JSON 字符串

很多初学者会混淆:

  • Python 字典:{'name': 'Tom'}
  • JSON 字符串:{"name": "Tom"}

它们看起来像,但不是同一种东西。

2. 忘记 encode()decode()

处理 Base64 时,经常会在字符串和字节之间切换。如果你直接传字符串,有时就会报错。

3. 只会 print() 不会日志

做小练习时用 print() 可以,但做项目时一定要逐步学会用 logging

4. 时间格式字符串写错

例如:

python
"%Y-%M-%d"

这里的 %M 是分钟,不是月份。月份应该是 %m

练习题

练习 1

定义一个字典,包含你的昵称、年龄、学习方向,然后把它保存到 student.json 文件中。

练习 2

写一段程序,记录开始时间和结束时间,统计程序运行了多少秒。

练习 3

把字符串 "hello python" 编码成 Base64,再解码回来。

练习 4

配置 logging,把一段程序运行信息写入 run.log 文件。

练习 5

输入一个时间字符串,例如 "2026-04-24 12:00:00",把它转成时间对象,再格式化为 "2026/04/24 12:00" 的形式输出。

本节小结

这一节你接触的这些工具库,看起来不像变量、循环那样“基础”,但它们在真实开发里出现的频率极高。

你要记住一个核心思想:

  • 语法决定你“能不能写程序”
  • 工具库决定你“能不能把程序写成真实可用的项目”

后面你学数据库、Django、爬虫时,这些库会不断出现。现在先把它们的基本用法掌握住,后面会轻松很多。

Built with VitePress.