Python 使用库:标准库与第三方库实战

Python 使用库:标准库与第三方库实战

编程语言能否流行,一方面看语法是否简单,另一方面看生态是否丰富。所谓"生态",就是有没有足够多的库来应对各种场景。荀子说:"君子生非异也,善假于物也。"写代码也一样,要善于利用现成的库。

Python 的库大致分两类:

  • 标准库:Python 自带,安装即可用。
  • 第三方库:别人写的库,需要额外安装。

我们不需要背下所有库,只要知道有什么,需要时能查到即可。


一、标准库

标准库内容非常丰富,官方文档:https://docs.python.org/3.10/library/index.html

主要包括:内置函数、内置类型、文本处理、时间日期、数学计算、文件目录、数据存储、加密解密、操作系统、并发编程、网络编程、多媒体、图形界面等。

1. import 导入模块

模块就是一个 .py 文件。使用 import 导入:

python 复制代码
import datetime

2. 日期计算

输入两个日期,计算相差多少天:

python 复制代码
import datetime

date1 = datetime.datetime(2012, 2, 14)
date2 = datetime.datetime(2022, 7, 12)

print(date2 - date1)

输出:

复制代码
3801 days, 0:00:00

快去算算你和心爱的人认识多少天了。

3. 字符串操作

字符串是内置类型,很多方法不需要导入模块。

(1)翻转单词顺序

输入 "I am a student.",输出 "student. a am I"。

python 复制代码
def reverse_words(s):
    tokens = s.split()
    tokens.reverse()
    return ' '.join(tokens)

print(reverse_words('I am a student.'))
(2)旋转字符串

判断 s 旋转若干次后能否变成 goal。

python 复制代码
def rotate_string(s, goal):
    return len(s) == len(goal) and goal in s + s

print(rotate_string('abcde', 'cdeab'))
(3)统计是给定字符串前缀的字符串数目
python 复制代码
def count_prefixes(words, s):
    res = 0
    for word in words:
        if s.startswith(word):
            res += 1
    return res

print(count_prefixes(["a", "b", "c", "ab", "bc", "abc"], "abc"))

4. 文件查找工具

指定搜索路径和关键字,查找文件名中包含关键字的文件。

python 复制代码
import os

input_path = input("请输入待搜索路径:")
pattern = input("请输入待搜索关键词:")

for dirpath, dirnames, filenames in os.walk(input_path):
    for f in filenames:
        if pattern in f:
            print(f'{dirpath}/{f}')

os.walk 返回三元组:当前路径、目录名列表、文件名列表。

更多 os 操作参考官方文档:https://docs.python.org/3/library/os.html


二、第三方库

标准库虽然强大,但终究有限。第三方库集合了全世界 Python 程序员的智慧,几乎无穷无尽。

遇到需求时,可以用搜索引擎查找该用哪个库。确定后,用 pip 安装。

1. pip 安装

pip 是 Python 内置的包管理器,类似手机应用商店。Python 官方用 PyPI(https://pypi.org/)收集第三方库。

安装命令:

bash 复制代码
pip install 库名

如果提示 'pip' 不是内部或外部命令,说明 pip 没加入 PATH,需要手动配置或重装 Python 时勾选"Add Python to PATH"。

安装后如果 PyCharm 仍找不到模块,检查 Settings -> Project -> Python Interpreter 是否正确。

2. 生成二维码

确定使用 qrcode 库。安装:

bash 复制代码
pip install qrcode[pil]

代码:

python 复制代码
import qrcode

img = qrcode.make('我真帅')
img.save('qrcode.png')

运行后生成二维码图片,扫码即可看到内容。二维码本质是用黑白点阵表示字符串。

3. 操作 Excel

读取 Excel 使用 xlrd,修改使用 xlwt。这里以 xlrd 为例。

安装(注意指定版本,最新版删除了 xlsx 支持):

bash 复制代码
pip install xlrd==1.2.0

假设有 d:/test.xlsx,求 101 班平均分:

python 复制代码
import xlrd

xlsx = xlrd.open_workbook('d:/test.xlsx')
table = xlsx.sheet_by_index(0)
nrows = table.nrows

count = 0
total = 0
for i in range(1, nrows):
    class_id = table.cell_value(i, 1)
    if class_id == 101:
        total += table.cell_value(i, 2)
        count += 1

print(f'平均分:{total / count}')

4. 监听键盘按键,自动播放音频

需求:每按键 10 次,播放一个音频鼓励自己。

安装:

bash 复制代码
pip install pynput==1.6.8
pip install playsound==1.2.2

准备 ding.mp3 放在同级目录。

代码:

python 复制代码
from pynput import keyboard
from playsound import playsound

count = 0

def on_release(key):
    global count
    print(key)
    count += 1
    if count % 10 == 0:
        playsound('ding.mp3')

listener = keyboard.Listener(on_release=on_release)
listener.start()
listener.join()

播放音频会导致按键卡顿,可以用多线程改进:

python 复制代码
from pynput import keyboard
from playsound import playsound
from threading import Thread

count = 0

def on_release(key):
    global count
    print(key)
    count += 1
    if count % 10 == 0:
        t = Thread(target=playsound, args=('ding.mp3',))
        t.start()

listener = keyboard.Listener(on_release=on_release)
listener.start()
listener.join()

三、综合案例:学生管理系统

实现一个命令行版本的学生管理系统,功能:

  • 新增学生
  • 显示学生
  • 查找学生
  • 删除学生
  • 存档到文件

1. 入口函数

python 复制代码
import sys
import os

students = []

def menu():
    print("1. 新增学生信息")
    print("2. 显示所有同学信息")
    print("3. 根据名字查找学生信息")
    print("4. 删除学生信息")
    print("0. 退出程序")
    choice = input("请输入您的选择:")
    return int(choice)

def main():
    print("+----------------------------+")
    print("| 欢迎来到学生管理系统!     |")
    print("+----------------------------+")
    while True:
        choice = menu()
        if choice == 0:
            sys.exit()
        elif choice == 1:
            insert()
        elif choice == 2:
            show()
        elif choice == 3:
            find()
        elif choice == 4:
            delete()
        else:
            print("您的输入有误!请重新输入!")

if __name__ == '__main__':
    main()

2. 新增学生

python 复制代码
def insert():
    print("[新增学生] 开始!")
    student_id = input("请输入学生的学号:")
    name = input("请输入学生的姓名:")
    gender = input("请输入学生的性别:")
    if gender not in ('男', '女'):
        print("性别不符合要求!新增学生失败!")
        return
    class_name = input("请输入学生的班级:")

    student = {
        'studentId': student_id,
        'name': name,
        'gender': gender,
        'className': class_name
    }
    global students
    students.append(student)
    save()
    print("[新增学生] 完毕!")

3. 显示学生

python 复制代码
def show():
    print("[显示学生] 开始!")
    for s in students:
        print(f"{s['studentId']}\t{s['name']}\t{s['gender']}\t{s['className']}")
    print(f"[显示学生] 完毕!共显示了 {len(students)} 条记录!")

4. 查找学生

python 复制代码
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} 条记录!")

5. 删除学生

python 复制代码
def delete():
    print("[删除学生] 开始!")
    student_id = input("请输入要删除的同学学号:")
    count = 0
    for s in students:
        if student_id == s['studentId']:
            print(f"删除 {s['name']} 同学的信息!")
            students.remove(s)
            count += 1
    save()
    print(f"[删除学生] 完毕!共删除 {count} 条记录!")

6. 存档与读档

约定存档文件 d:/record.txt,每行一个学生,字段用 \t 分隔。

存档:

python 复制代码
def save():
    with open('d:/record.txt', 'w', encoding='utf8') 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)} 条记录!")

读档:

python 复制代码
def load():
    if not os.path.exists('d:/record.txt'):
        return
    global students
    students = []
    with open('d:/record.txt', 'r', encoding='utf8') as f:
        for line in f:
            line = line.strip()
            if not line:
                continue
            parts = line.split('\t')
            student = {
                'studentId': parts[0],
                'name': parts[1],
                'gender': parts[2],
                'className': parts[3]
            }
            students.append(student)

在 main() 开头调用 load()。

7. 打包成 exe

安装 pyinstaller:

bash 复制代码
pip install pyinstaller

打包:

bash 复制代码
pyinstaller -F 学生管理系统.py

-F 表示打包成单个 exe。完成后在 dist 目录下找到 exe,可拷贝到没有 Python 环境的机器上运行。


四、后续扩展


五、总结

  • 标准库:Python 自带,import 即可用,如 datetime、os。
  • 第三方库:需要 pip install,如 qrcode、xlrd、pynput。
  • 实际开发中要善于搜索、阅读文档、利用现成库。
  • 综合案例串联了函数、列表、字典、文件操作、异常处理等知识,是很好的练习。
  • 打包成 exe 可以让程序在没有 Python 环境的机器上运行。

库是编程的"外挂",善用库,才能把精力集中在真正要解决的问题上。

相关推荐
码流子4 分钟前
02-易迁信创兼容引擎
大数据·数据库·python
Smoothcloud润云6 分钟前
GPU服务器租用实例DNS与HTTPS下载排障实战
大数据·运维·服务器·人工智能·https·gpu算力
yuniko-n6 分钟前
【JUC】wait 和 sleep
java·开发语言
kimnoic10 分钟前
Python常见模块及其用法示例详解
开发语言·python
databook12 分钟前
Scikit-Learn实战:5步搞定PCA降维
python·机器学习·scikit-learn
Apipi*15 分钟前
30天速通Linux 第五章Linux 进程管理
linux·运维·服务器
白帽攻防录20 分钟前
SRC 挖洞:TanStack Start 服务器函数 XSS 深度复盘,CVE-2026-102989 怎么窃取用户会话
运维·服务器·网络安全·xss
小蜗牛狂飙记20 分钟前
Windows 双击 Jar 包无反应,不用写 bat 脚本!Jarfix 一键修复(以 Struts2 扫描工具为例)
windows·struts·jar
程序员-Benothing22 分钟前
Linux文本排序统计命令:sort、uniq、wc、cut、tr实战
java·开发语言·算法
CRMEB22 分钟前
前后端技术栈全面换代!CRMEB 多商户(Java)v3.0更新预告
java·开发语言