Python 标准库是一组随 Python 一起安装的模块.它们由Python官方维护,通常不需要额外安装,直接导入即可:
import math import json from pathlib import Path
标准库覆盖了大量常见任务:
# 数学计算
import math
print(math.sqrt(16))
# 随机数
import random
print(random.randint(1, 10))
# 日期时间
from datetime import datetime
print(datetime.now())
# JSON 数据
import json
data = json.loads('{"name": "Tom"}')
print(data["name"])
# 文件路径
from pathlib import Path
print(Path.cwd())
可以这样理解:
mathurllibmath.sqrt常见导入方式:
import math print(math.sqrt(9))
from math import sqrt print(sqrt(9))
通常推荐第一种,因为来源更清楚.
| 类型 | 示例 | 是否需要安装 |
|---|---|---|
| 内置功能 | print、len、list | 不需要导入 |
| 标准库 | json、pathlib、datetime | 不需要安装 |
| 第三方库 | requests、numpy、pandas | 通常需要 pip install |
例如:
import json # 标准库 import requests # 第三方库,通常需要先安装
建议先掌握:
pathlib:文件和目录datetime:日期与时间json:JSON 数据random:随机数math:数学运算re:正则表达式collections:常用数据结构itertools:迭代工具os、sys:操作系统和 Python 运行环境logging:日志记录import math print(dir(math)) help(math.sqrt)
也可以查看模块文档字符串:
print(math.__doc__)
学习标准库不需要一次全部记住.重点是知道"标准库大概能解决哪些问题",实际编程时再查对应模块.
在Python官方文档上可以看到这些库的内容
使用 import 可以导入标准库的一个 模块
import [模块名]
所谓"模块",其实就是一个单独的.py文件.
使用import语句可以把这个外部的.py文件导入到当前.py文件中,并执行其中的代码.
在Python中,模块需要先导入,才能使用其中的函数、类或变量.
import math result = math.sqrt(16) print(result) # 4.0
导入后,通过:
模块名.功能名
来调用模块中的功能.
import math import random import datetime
虽然也可以写成:
import math, random
但通常推荐每个模块单独写一行,更清晰.
使用 as 可以缩短模块名:
import datetime as dt now = dt.datetime.now() print(now)
常见第三方库也经常使用别名:
import numpy as np import pandas as pd
from math import sqrt result = sqrt(25) print(result) # 5.0
此时不需要写 math.sqrt(),可以直接使用 sqrt().
也可以导入多个功能:
from math import sqrt, pi print(sqrt(9)) print(pi)
from math import *
这种写法会导入模块中的大量名称,容易造成命名冲突,也难以判断某个函数来自哪里.更推荐:
import math
或者:
from math import sqrt
假设有一个文件 tools.py:
def add(a, b):
return a + b
在同一目录的另一个 Python 文件中可以这样导入:
import tools result = tools.add(3, 5) print(result) # 8
也可以只导入函数:
from tools import add print(add(3, 5))
通常最推荐的写法是:
import 模块名
因为调用时会明确显示功能来自哪个模块,可读性更好.
输入任意的两个日期, 计算两个日期之间隔了多少天.
import datetime date1 = datetime.datetime(2016, 2, 14) date2 = datetime.datetime(2026, 7, 18) print(date2 - date1)

关于datetime的更多操作,可以参考官方文档

使用str的split方法进行字符串切分,指定空格为分隔符.返回结果是一个列表.
使用列表的reverse方法进行逆序.
使用str的join方法进行字符串拼接.把列表中的内容进行合并.
class Solution(object):
def reverseMessage(self, message):
tokens = message.split()
tokens.reverse()
return ' '.join(tokens)

使用len求字符串的长度.如果长度不相同, 则一定不能旋转得到.
将s和自己进行拼接,然后直接使用in方法来判定goal是否是s + s的子串.
class Solution(object):
def rotateString(self, s, goal):
return len(s) == len(goal) and goal in s + s

依次遍历words中的字符串.
直接使用字符串的startswith方法即可判定当前字符串是否是s的前缀.
class Solution(object):
def countPrefixes(self, words, s):
res = 0
for word in words:
if s.startswith(word):
res += 1
return res
指定一个待搜索路径,同时指定一个待搜索的关键字. 在待搜索路径中查找是否文件名中包含这个关键字.
使用 os.walk 即可实现目录的递归遍历.
os.walk返回一个三元组,分别是当前路径,当前路径下包含的目录名(多个),当前路径下包含的文件名(多个)
import os
inputPath = input('请输入待搜索路径: ')
pattern = input('请输入待搜索关键词: ')
for dirpath, dirnames, filenames in os.walk(inputPath):
for f in filenames:
if pattern in f:
print(f'{dirpath}/{f}')
关于os模块的更多操作,参考官方文档
第三方库是由 Python 官方标准库之外的开发者或组织提供的功能包.它们通常需要先安装,再使用 import 导入.
例如:
import requests import numpy import pandas
这些库默认不一定随 Python 安装,需要使用 pip 安装.
pip是Python内置的包管理器.所谓包管理器就类似于我们平时使用的手机app应用商店一样.
在终端或命令行中执行:
pip install requests
部分环境需要写:
python -m pip install requests
安装完成后,就可以在代码中导入:
import requests
使用 requests 获取网页内容:
import requests
response = requests.get("https://example.com")
print(response.status_code)
使用 numpy 创建数组:
import numpy as np numbers = np.array([1, 2, 3, 4]) print(numbers)
| 用途 | 第三方库 |
|---|---|
| 网络请求 | requests、httpx |
| 数据分析 | pandas |
| 数值计算 | numpy |
| 数据可视化 | matplotlib |
| 网页开发 | flask、django、fastapi |
| 爬虫 | beautifulsoup4、scrapy |
| 机器学习 | scikit-learn |
| 深度学习 | pytorch、tensorflow |
| Excel 处理 | openpyxl |
| 图像处理 | pillow、opencv-python |
import math # 标准库,不需要额外安装 import requests # 第三方库,通常需要先安装
| 类型 | 示例 | 是否需要安装 |
|---|---|---|
| Python 内置功能 | print、len | 不需要 |
| 标准库 | math、json、random | 不需要 |
| 第三方库 | requests、numpy、pandas | 通常需要 |
pip list
查看某个库的信息:
pip show requests
卸载第三方库:
pip uninstall requests
升级第三方库:
pip install --upgrade requests
核心流程就是:
查找库 → pip 安装 → import 导入 → 调用功能

得到信息,qrcode这个库,可以用来生成二维码.

点击则进入 qrcode 的详情页.文档开头描述了如何安装qrcode.

页面中央位置描述了qrcode库的使用方法.

pip install qrcode

import qrcode
img = qrcode.make('hello world')
img.save('qrcode.png')
运行完成之后,我们就可以看到有一张二维码的图片,扫一扫显示出来的就是"hello world".使用微信或者其他工具扫码,即可看到二维码内容.所谓二维码,本质上就是使用黑白点阵表示一个字符串.我们日常使用的二维码内部一般是一个URL,扫码后会自动跳转到对应的地址,从而打开一个网页.
读取excel可以使用xlrd模块.文档地址
修改excel可以使用xlwt模块.文档地址
此处以 xlrd 为例,演示excel的基本操作.
需求有如下excel 表格:

求100班的同学的平均分.
1.安装xlrd
pip install xlrd==1.2.0
注意: 此处要指定版本号安装.如果不指定版本号,则安装最新版.最新版里删除了对xlsx格式文件的支持.
2.编写代码
使用 open_workbook 方法打开一个 excel 文件.
使用 xlsx.sheet_by_index(0) 获取到 0 号标签页.
使用 table.nrows 获取到表格的行数.
使用 table.cell_value(row, col) 获取到表格中 row, col 位置的元素值.
import xlrd
# 1. 打开 xlsx 文件
xlsx = xlrd.open_workbook('文件地址链接')
# 2. 获取 0 号标签页. (当前只有一个标签页)
table = xlsx.sheet_by_index(0)
# 3. 获取总行数
nrows = table.nrows
# 4. 遍历数据
count = 0
total = 0
for i in range(1, nrows):
# 使用 cell_value(row, col) 获取到指定坐标单元格的值.
classId = table.cell_value(i, 1)
if classId == 101:
total += table.cell_value(i, 2)
count += 1
print(f'平均分: {total / count}')
监听键盘按键,每按键20下,就自动播放一个音频,鼓励一下辛苦搬砖的自己.
1.安装第三方依赖
pynput 用于监听键盘按键.注意版本不要用最新.playsound 用于播放音频.
pip install pynput==1.6.8 pip install playsound==1.2.2
2.准备音频文件
此处准备了一个xxx.mp3放到和py代码同级目录中.
3.编写代码
使用 from import 的格式直接导入模块中的指定对象/函数.
使用 keyboard.Listener 监听键盘按键.其中 on_release 会在释放按键时被调用.
使用 listener.start 启动监听器.为了防止程序直接退出, 使用 listener.join 让程序等待用户按键.
使用count 计数,每隔10 次,调用 playsound 播放音频文件.
from pynput import keyboard
from playsound import playsound
count = 0
def on_release(key):
print(key)
global count
count += 1
if count % 10 == 0:
playsound('xxx.mp3')
listener = keyboard.Listener(
on_release=on_release)
listener.start()
listener.join()
运行程序,即可感受到效果.
4.改进代码
上述代码在执行过程中,会感觉到播放音频会导致按键卡顿.可以使用多线程解决这个问题.
关于多线程的知识,在此处不详细介绍.
使用 threading.Thread 引入多线程类.
使用Thread 的构造函数来构造一个线程. target表示线程要执行的任务,args表示target中要调用函数的参数.
使用Thread.start() 启动线程.
from pynput import keyboard
from playsound import playsound
from threading import Thread
count = 0
def on_release(key):
print(key)
global count
count += 1
if count % 10 == 0:
t = Thread(target=playsound, args=('ding.mp3',))
t.start()
#playsound('xxx.mp3')
listener = keyboard.Listener(
on_release=on_release)
listener.start()
listener.join()
实现一个命令行版本的学生管理系统.
功能:
新增学生
显示学生
查找学生
删除学生
存档到文件
使用一个全局列表 students表示所有学生信息.
使用menu函数和用户交互.这是一个自定义函数.
使用insert ,show, find, delete这几个自定义函数完成增删查操作.
使用sys.exit 实现程序退出.
# 使用列表表示所有的学生
students = []
def main():
"""
程序的入口函数
"""
print('+--------------------------+')
print('| 欢迎来带学生管理系统! |')
print('+--------------------------+')
while True:
choice = menu()
if choice == 0:
sys.exit()
if choice == 1:
insert()
elif choice == 2:
show()
elif choice == 3:
find()
elif choice == 4:
delete()
else:
print('您的输入有误! 请重新输入!')
main()
def menu():
"""
显示程序菜单
"""
print(" 1. 新增学生信息")
print(" 2. 显示所有同学信息")
print(" 3. 根据名字查找学生信息")
print(" 4. 删除学生信息")
print(" 0. 退出程序")
choice = input(" 请输入您的选择: ")
return int(choice)
def insert():
print("[新增学生] 开始!")
studentId = input("请输入学生的学号: ")
name = input("请输入学生的姓名: ")
gender = input("请输入学生的性别: ")
if gender not in ('男', '女'):
print("性别不符合要求! 新增学生失败!")
return
className = input("请输入学生的班级: ")
# 使用一个字典表示学生信息
student = {
'studentId': studentId,
'name': name,
'gender': gender,
'className': className
}
# 把字典添加到学生列表中
global students
students.append(student)
print("[新增学生] 完毕!")
def show():
print("[显示学生] 开始!")
for s in students:
print(f"
[{s['studentId']}]t{s['name']}t{s['gender']}t{s['className']}")
print(f"[显示学生] 完毕! 共显示了 {len(students)} 条记录!")
def find():
print("[查找学生] 开始!")
name = input("请输入要查找的同学姓名: ")
count = 0
for s in students:
if name == s['name']:
print(f"
[{s['studentId']}]t{s['name']}t{s['gender']}t{s['className']}")
count += 1
print(f"[查找学生] 完毕! 共查找到 {count} 条记录!")
def delete():
print("[删除学生] 开始!")
studentId = input("请输入要删除的同学学号: ")
count = 0
for s in students:
if studentId == s['studentId']:
print(f"删除 {s['name']} 同学的信息!")
students.remove(s)
count += 1
print(f"[删除学生] 完毕! 共删除 {count} 条记录!")
1.约定存档格式
约定存档文件放到 xxx.txt 文件中.
并且以行文本的方式来保存学生信息. 格式如下:
学号t名字t性别t班级 学号t名字t性别t班级 学号t名字t性别t班级
每个同学占一行.
每个同学的信息之间使用 t 制表符进行分隔.
2.实现存档函数
def save():
"""
存档函数
"""
with open('xxx.txt', 'w') as f:
for s in students:
f.write(f"
{s['studentId']}t{s['name']}t{s['gender']}t{s['className']}n")
print(f"[存档成功] 共存储了 {len(students)} 条记录!")
在insert 和 delete末尾,调用save函数进行存档.
# 执行存档 save()
3.实现读档函数
def load():
"""
读档函数
"""
# 如果存档文件不存在, 则跳过读档环节
if not os.path.exists('d:/record.txt'):
return
# 先清空全局变量里的数据
global students
students = []
with open('xxx.txt', 'r') as f:
for line in f:
# 去除末尾的换行符
line = line.strip()
tokens = line.split('t')
if len(tokens) < 4:
print(f"文件格式有误! line={line}")
continue
student = {
'studentId': tokens[0],
'name': tokens[1],
'gender': tokens[2],
'className': tokens[3]
}
students.append(student)
print(f"[读档成功] 共读取了 {len(students)} 条记录!")
在main函数开头的地方,调用load加载存档.
load()
当前虽然已经实现了一个管理系统,但是.py的文件只能在安装了Python 环境的机器上运行.为了能够更好的部署到其他主机上,可以借助pyinstaller来把Python程序打包成exe程序.
1.安装 pyinstaller
pip install pyinstaller
2.打包程序
-F 表示打包成单个 exe (不带动态库)
pyinstall -F 学生管理系统.py
注意: 如果提示找不到pyinstaller命令,则需要重启一下 PyCharm.稍等片刻,很快打包完成.
此时就可以把这个程序拷贝给其他机器使用了.无需Python环境即可运行.
python3 cookbook
python经典进阶书籍.针对各种典型场景提供了一些解决方案.
awesome-python
整理了Python的一些非常实用的程序库.
500Lines or Less
使用简短的Python代码来实现一些有意思的程序.