常用工具库
写 Python 程序时,不是所有功能都需要你从零开始造。Python 标准库已经帮你准备了很多常见能力,比如处理 JSON、时间、日志、编码转换等。
对于零基础来说,这一节非常重要。因为很多人学到这里时,会有一个误区:以为学 Python 就只是学变量、条件、循环、函数。实际上,真正写项目时,你几乎一定会接触这些工具库。
比如:
- 调接口时,你会遇到 JSON
- 做定时任务时,你会遇到时间和日期
- 保存程序运行记录时,你会用到日志
- 处理图片、签名、加密串时,你会遇到 Base64
所以这一节的目标,不是让你把标准库背下来,而是让你知道:常见问题应该去哪里找现成工具。
本节目标
- 理解什么是标准库
- 学会使用
json处理结构化数据 - 学会使用
time和datetime处理时间 - 学会使用
base64进行编码转换 - 学会使用
logging记录日志 - 知道这些工具库在真实项目中的典型用途
什么是标准库
所谓标准库,你可以把它理解成:Python 安装完成后,系统已经自带的一批常用工具。
它们的特点是:
- 不需要额外安装
- 可以直接
import - 覆盖很多常见开发场景
例如:
import json
import time
import datetime
import base64
import logging如果导入不报错,说明这些模块本身就已经存在。
json:处理结构化数据
为什么要学 json
JSON 是现在最常见的数据交换格式之一。
你在这些场景里几乎都会遇到它:
- 浏览器和后端接口交互
- Python 调用第三方接口
- 配置文件存储
- 爬虫抓取接口数据
JSON 和 Python 中的数据结构非常像:
- JSON 对象很像 Python 字典
- JSON 数组很像 Python 列表
Python 对象转 JSON 字符串
import json
data = {
"name": "小明",
"age": 18,
"skills": ["Python", "Linux", "MySQL"]
}
result = json.dumps(data, ensure_ascii=False)
print(result)
print(type(result))输出结果:
{"name": "小明", "age": 18, "skills": ["Python", "Linux", "MySQL"]}
<class 'str'>这里的重点是:
dumps中的s表示 string- 它会把 Python 对象转成 JSON 字符串
ensure_ascii=False可以避免中文被转义成乱码形式
JSON 字符串转 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])输出结果:
{'name': '小明', 'age': 18, 'skills': ['Python', 'Linux']}
<class 'dict'>
小明
Python保存 JSON 文件
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("写入完成")输出结果:
写入完成生成文件示例:
{
"site": "Python 学习空间",
"group": "QQ群号"
}读取 JSON 文件
import json
with open("config.json", "r", encoding="utf-8") as file:
data = json.load(file)
print(data["site"])输出结果:
Python 学习空间time:处理时间戳和等待
time.time()
它会返回当前时间戳,也就是从某个固定起点开始到现在的秒数。
import time
now = time.time()
print(now)
print(type(now))输出结果示例:
1713945600.123456
<class 'float'>时间戳常见用途:
- 统计程序耗时
- 给文件命名
- 生成简单版本号
time.sleep()
它会让程序暂停一段时间。
import time
print("开始")
time.sleep(2)
print("两秒后继续执行")输出结果:
开始
两秒后继续执行爬虫里常用它做延时,避免请求过快。
统计程序运行耗时
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} 秒")输出结果:
第 1 次执行
第 2 次执行
第 3 次执行
总耗时:3.00 秒datetime:处理日期和时间对象
如果说 time 更偏底层,那么 datetime 更适合日常业务开发。
获取当前时间
from datetime import datetime
now = datetime.now()
print(now)
print(type(now))输出结果示例:
2026-04-24 10:30:15.123456
<class 'datetime.datetime'>格式化时间
from datetime import datetime
now = datetime.now()
text = now.strftime("%Y-%m-%d %H:%M:%S")
print(text)输出结果示例:
2026-04-24 10:30:15常见格式符:
%Y:四位年份%m:月份%d:日期%H:小时%M:分钟%S:秒
字符串转时间对象
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))输出结果:
2026-04-24 08:30:00
<class 'datetime.datetime'>计算时间差
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())输出结果:
2:30:00
9000.0这在日志分析、订单超时、任务调度里都很常见。
base64:编码转换
Base64 不是加密,它只是把二进制数据转换成文本形式,方便传输。
你会在这些场景中遇到它:
- 图片转字符串
- 接口参数传输
- 某些签名和令牌处理
字符串编码为 Base64
import base64
text = "python 学习空间"
encoded = base64.b64encode(text.encode("utf-8"))
print(encoded)
print(encoded.decode("utf-8"))输出结果示例:
b'cHl0aG9uIOWtpuS5oOepuumXtA=='
cHl0aG9uIOWtpuS5oOepuumXtA==Base64 解码
import base64
text = "cHl0aG9uIOWtpuS5oOepuumXtA=="
decoded = base64.b64decode(text)
print(decoded)
print(decoded.decode("utf-8"))输出结果:
b'python \xe5\xad\xa6\xe4\xb9\xa0\xe7\xa9\xba\xe9\x97\xb4'
python 学习空间logging:记录程序日志
初学者经常用 print() 排错,这没有错,但它不适合正式项目。
为什么?
print()没有级别- 不方便统一管理
- 不方便保存到日志文件
logging 专门用来做这件事。
最简单的日志输出
import logging
logging.basicConfig(level=logging.INFO)
logging.debug("这是一条 debug 日志")
logging.info("程序启动成功")
logging.warning("配置文件不存在,使用默认配置")
logging.error("数据库连接失败")输出结果示例:
INFO:root:程序启动成功
WARNING:root:配置文件不存在,使用默认配置
ERROR:root:数据库连接失败日志级别说明
常见日志级别从低到高大致是:
DEBUG:调试信息INFO:普通运行信息WARNING:警告ERROR:错误CRITICAL:严重错误
写入日志文件
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")输出结果:
日志已写入 app.log文件内容示例:
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. 时间格式字符串写错
例如:
"%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、爬虫时,这些库会不断出现。现在先把它们的基本用法掌握住,后面会轻松很多。