学到这里,你其实已经能写不少程序了。但有个问题:很多常见需求(发网络请求、处理日期、数学运算、操作文件系统)如果都自己从零写,会累死。

好消息是——别人已经写好了,你直接拿来用就行。 这就是 Python 最迷人的地方:它有一个庞大的"库"生态。

这一课,我们学会三件事:import 导入标准库pip 装第三方库


一、import:把别人写好的代码拿进来

Python 自带一堆"标准库",装 Python 时就有了,用 import 就能用:

import math

print(math.sqrt(16))     # 4.0,开平方
print(math.pi)           # 3.14159...
print(math.floor(3.7))   # 3,向下取整
print(math.ceil(3.2))    # 4,向上取整

导入后,用 模块名.函数名 的方式调用。也可以只导入某个函数:

from math import sqrt, pi

print(sqrt(16))    # 4.0,直接用,不用写 math.
print(pi)

还可以起别名:

import math as m
print(m.sqrt(9))    # 3.0
🧊 冷笑话:一个 Python 脚本对另一个说:"走,一起 import 点乐子进来。"——import 就是"把别人写好的东西拿进来用"。

二、常用标准库速览

Python 自带几十个标准库,最常用的这几个值得记住:

import random          # 随机数
random.randint(1, 6)   # 掷骰子,1~6
random.choice([1,2,3]) # 随机选一个
random.shuffle(lst)    # 洗牌

import datetime        # 日期时间
datetime.date.today()  # 今天日期
datetime.datetime.now()# 现在时刻

import os              # 操作系统
os.getcwd()            # 当前目录
os.path.exists("a.txt")# 文件是否存在
os.makedirs("dir")     # 建目录

import json            # JSON 处理
json.dumps({"a": 1})   # 字典转 JSON 字符串
json.loads('{"a": 1}') # JSON 字符串转字典

import time            # 时间
time.sleep(1)          # 暂停 1 秒

import re              # 正则表达式
re.findall(r"\d+", "a1b22c333")   # ['1', '22', '333']
json 特别重要——它是程序之间交换数据的通用格式,后面学"调 API"全靠它。

三、datetime:处理日期和时间

第二节里 datetime 只露了一面。它其实是脚本里最常用的库之一——日志打时间、算"距离截止还有几天"、给文件名加日期,都靠它。

先分清两个东西:

  • datetime.date:只有"年月日",没有时刻。
  • datetime.datetime:年月日 + 时分秒,最常用。
import datetime

# 现在这一刻
now = datetime.datetime.now()
print(now)                          # 2026-09-08 04:40:39.123456

# 指定某个日期时刻
d = datetime.datetime(2026, 9, 8, 9, 30)
print(d)                            # 2026-09-08 09:30:00

# 单独取出年月日时分秒
print(now.year, now.month, now.day)
print(now.hour, now.minute, now.second)

格式化输出(strftime)——把日期变成你想要的字符串:

now = datetime.datetime.now()
print(now.strftime("%Y-%m-%d"))           # 2026-09-08
print(now.strftime("%Y年%m月%d日 %H:%M"))  # 2026年09月08日 04:40

常用格式符号(记这几个就够):

符号含义示例
%Y四位数年份2026
%m月(01-12)09
%d日(01-31)08
%H时(24 小时)04
%M40
%S39

反向解析(strptime)——把字符串变回日期对象:

s = "2026-09-08"
d = datetime.datetime.strptime(s, "%Y-%m-%d")
print(d.year, d.month, d.day)   # 2026 9 8

算日期差(timedelta)——两个日期相减,或给日期加减一段时间:

from datetime import datetime, timedelta

d1 = datetime(2026, 9, 8)
d2 = datetime(2026, 10, 1)

delta = d2 - d1
print(delta.days)                    # 23,相差 23 天

print(d1 + timedelta(days=30))       # 2026-10-08 00:00:00,加 30 天
print(datetime.now() + timedelta(hours=2))   # 加 2 小时
小结:strftime 格式化输出、strptime 解析输入、timedelta 算差值,三者合起来就能覆盖绝大多数日期需求。

四、csv:读写表格数据

CSV 是最通用的表格格式——Excel 能开、记事本能看、程序能读。它就是"每行一条记录,列用逗号分开"的纯文本:

name,age,city
张三,20,北京
李四,22,上海

用 Python 自带的 csv 模块来读写,比手动 split(",") 更稳(它会正确处理引号、逗号转义这些边角情况)。

读 CSV:

import csv

with open("data.csv", "r", encoding="utf-8") as f:
    reader = csv.reader(f)          # 返回一个"行"的迭代器
    header = next(reader)           # 第一行是表头
    print("表头:", header)
    for row in reader:
        print(row)                  # 每行是一个列表,如 ['张三', '20', '北京']

用表头当键来读(DictReader)——不用记列的顺序,直接按列名取值:

import csv

with open("data.csv", "r", encoding="utf-8") as f:
    for row in csv.DictReader(f):
        print(row["name"], row["age"])   # 直接按列名取

写 CSV:

import csv

rows = [
    ["name", "age", "city"],
    ["张三", 20, "北京"],
    ["李四", 22, "上海"],
]

with open("out.csv", "w", encoding="utf-8", newline="") as f:
    writer = csv.writer(f)
    writer.writerows(rows)     # 一次写多行
写文件时记得加 newline="",否则 Windows 下会多出空行。

五、pip:安装第三方库

标准库之外,还有海量的第三方库,要用 pip 安装。装之前通常先建一个虚拟环境,把不同项目的依赖隔离开,不互相污染:

# 建虚拟环境(项目目录下)
python3 -m venv venv

# 激活(Linux/Mac)
source venv/bin/activate
# 激活(Windows)
# venv\Scripts\activate

# 装库
pip install requests
pip install numpy
pip install pandas

# 查看已装
pip list

装完就能 import 了:

import requests
import numpy as np    # numpy 习惯起别名 np
import pandas as pd   # pandas 习惯起别名 pd

六、自己写模块:把函数分文件放

你也能自己写模块——把函数放到一个 .py 文件里,另一个文件 import 它。

假设有个 mytools.py

# mytools.py
def double(x):
    return x * 2

def greet(name):
    return f"你好,{name}"

在同一个目录下的另一个文件里:

import mytools

print(mytools.double(5))     # 10
print(mytools.greet("张三"))  # 你好,张三

这就是模块的本质:一个 .py 文件就是一个模块。项目一大,就把代码拆成多个模块,各管各的。


七、if __name__ == "__main__" 是啥?

看别人的代码,常常看到这行。它的作用是:这个文件被"直接运行"时,才执行下面的代码;被"import"时,不执行。

def main():
    print("程序启动")

if __name__ == "__main__":
    main()
  • 直接运行 python3 这个文件.py → 会打印"程序启动"。
  • 被别的文件 import 这个文件 → 不打印(只把函数借过去用)。

好处:既能让文件独立运行,又能当模块被复用,互不干扰。


八、动手时间 🎯

实验 1:掷骰子游戏

import random

def roll():
    return random.randint(1, 6)

for _ in range(5):
    print(f"掷出了 {roll()}")

实验 2:JSON 读写

import json

data = {"name": "张三", "age": 20, "hobbies": ["篮球", "游戏"]}

# 存成 JSON 文件
with open("data.json", "w", encoding="utf-8") as f:
    json.dump(data, f, ensure_ascii=False, indent=2)

# 读回来
with open("data.json", "r", encoding="utf-8") as f:
    loaded = json.load(f)

print(loaded["name"])    # 张三

实验 3:用 requests 抓网页(需先 pip install requests)

import requests

r = requests.get("https://www.baidu.com")
print(r.status_code)      # 200 表示成功
print(r.text[:100])       # 前 100 个字符

九、小结

  1. import 把别人写好的代码拿来用模块.函数from 模块 import 函数
  2. 标准库自带(math/random/json/os/time)datetime 管日期、csv 管表格;第三方库用 pip install 装,先建 venv 隔离。
  3. 一个 .py 文件就是一个模块,项目大了就拆文件;if __name__ == "__main__" 区分"直接运行"和"被导入"。

下一课,我们学 异常处理与调试——让程序不再一遇错就崩溃,学会优雅地兜底和定位 bug。

先把「JSON 读写」和「掷骰子」敲熟,模块的手感就长在你脑子里了。

标签: none

添加新评论