脚本专家 发表于 2026-9-18 11:00:00

Python标准库与第三方库实战:二维码Excel键盘监听

Python 的库通常分为标准库和第三方库:标准库随 Python 安装,import 后即可使用;第三方库需要额外用 pip 安装。本文按标准库常用模块、第三方库安装与实战、命令行学生管理系统、pyinstaller 打包的顺序,整理 datetime、os、qrcode、xlrd、pynput、playsound 等库的落地用法。

一、标准库常用模块
1. 日期计算
datetime 可以直接做日期减法,结果为 timedelta。

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

输出为 3801 days, 0:00:00。这个例子可用于计算两个日期相差多少天。

2. 字符串操作
字符串是内置类型,很多方法不用导入模块。
翻转单词顺序:

def reverse_words(s):
    tokens = s.split()
    tokens.reverse()
    return ' '.join(tokens)
print(reverse_words('I am a student.'))

输入 I am a student.,输出 student. a am I。思路是按空白切分成单词,反转列表后再用空格拼接。
判断旋转字符串:

def rotate_string(s, goal):
    return len(s) == len(goal) and goal in s + s
print(rotate_string('abcde', 'cdeab'))

如果 goal 是 s 旋转若干次后的结果,那么 goal 一定存在于 s+s 中,同时长度必须相等。
统计是给定字符串前缀的字符串数目:

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'))

这里用 s.startswith(word) 判断前缀,符合条件的字符串会累加计数。

3. 文件查找工具
指定搜索路径和关键词,查找文件名中包含关键词的文件。

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 返回三元组:当前路径、目录名列表、文件名列表。遍历 filenames 即可对文件名做包含判断。

二、第三方库安装与实战
遇到需求时,先搜索适合的库,再用 pip 安装。pip 是 Python 内置包管理器,PyPI 用于收集第三方库。常用命令:

pip install 库名

如果提示 'pip' 不是内部或外部命令,说明 pip 没有加入 PATH,需要配置 PATH,或在重装 Python 时勾选 Add Python to PATH。安装后如果 PyCharm 仍找不到模块,检查 Settings -> Project -> Python Interpreter 是否选对解释器。

1. 生成二维码
安装 qrcode:

pip install qrcode

代码:

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

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

2. 用 xlrd 操作 Excel
读取 Excel 使用 xlrd,修改使用 xlwt。以 xlrd 为例,安装时要指定版本,因为最新版删除了 xlsx 支持:

pip install xlrd==1.2.0

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

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}')

代码打开第一张工作表,nrows 取总行数,从第 1 行开始跳过表头;第 1 列是班级,第 2 列是分数。

3. 监听键盘按键,自动播放音频
需求:每按键 10 次,播放一个音频。安装指定版本:

pip install pynput==1.6.8
pip install playsound==1.2.2

准备 ding.mp3 放在同级目录。基础实现:

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()

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

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()

把播放动作放到子线程,监听回调不再等待音频播放结束。

三、综合案例:命令行学生管理系统
功能包括新增学生、显示学生、查找学生、删除学生、存档到文件。核心数据结构是 students 列表,每个学生用字典保存 studentId、name、gender、className。

1. 入口函数

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. 新增学生

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. 显示学生

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


4. 查找学生

def find():
    print('[查找学生] 开始!')
    name = input('请输入要查找的同学姓名:')
    count = 0
    for s in students:
      if name == s['name']:
            print(s['studentId'], s['name'], s['gender'], s['className'], sep='\t')
            count += 1
    print(f'[查找学生] 完毕!共查找到 {count} 条记录!')


5. 删除学生

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


6. 存档与读档
约定存档文件为 d:/record.txt,每行一个学生,字段用制表符分隔。
存档:

def save():
    with open('d:/record.txt', 'w', encoding='utf8') as f:
      for s in students:
            f.write('{}\t{}\t{}\t{}\n'.format(s['studentId'], s['name'], s['gender'], s['className']))
    print(f'[存档成功] 共存储了 {len(students)} 条记录!')

读档:

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,
                'name': parts,
                'gender': parts,
                'className': parts
            }
            students.append(student)

在 main() 开头调用 load(),程序启动时恢复数据。

7. 打包成 exe
安装 pyinstaller:

pip install pyinstaller

打包:

pyinstaller -F 学生管理系统.py

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

四、总结
标准库是 Python 自带,import 即可用,如 datetime、os;第三方库需要 pip install,如 qrcode、xlrd、pynput。实际开发中要善于搜索、阅读文档、利用现成库。学生管理系统案例串联了函数、列表、字典、文件操作、异常处理等知识,打包成 exe 可以让程序在没有 Python 环境的机器上运行。库是编程的外挂,善用库,才能把精力集中在真正要解决的问题上。

热心网友4 发表于 2026-9-18 19:00:00

Re: Python标准库与第三方库实战:二维码Excel键盘监听

这篇整理得很实用,标准库和第三方库的区别讲得挺清楚。datetime 算日期差、字符串旋转判断、os.walk 查找文件这几个例子都很适合拿来练手。xlrd 必须指定 1.2.0 才能读 xlsx 这个坑确实容易踩,装完还要确认 PyCharm 里选对解释器,不然很容易一直提示找不到模块。pynput 监听按键、每十次播放一次音频的思路挺有意思,不过直接播放会卡顿,改成多线程就顺很多。楼主最后多线程那段代码好像没贴完,args 后面断了,方便的话可以补一下完整实现,想跟着试试。

热心网友3 发表于 2026-9-18 19:10:00

Re: Python标准库与第三方库实战:二维码Excel键盘监听

感谢分享,这篇把标准库和第三方库的常见用法串得很清楚,对刚入门 Python 的人很友好。日期相减得到 timedelta、字符串翻转和前缀统计、os.walk 查找文件这些例子都很直接,抄下来就能跑。第三方库部分也很接地气,qrcode 生成二维码、xlrd 读 Excel、pynput 监听键盘配合 playsound 播放音频,都是实际会用到的场景。特别提醒 xlrd 要装 1.2.0、pip 没进 PATH 以及 PyCharm 解释器选择问题,这些坑很实在。多线程播放音频避免按键卡顿的思路也很清楚。等后面 pyinstaller 打包部分再展开就更完整了。感谢整理!

热心网友3 发表于 2026-9-18 19:20:00

Re: Python标准库与第三方库实战:二维码Excel键盘监听

整理得挺全面,标准库和第三方库分开讲,例子也很接地气。datetime 做日期减法、os.walk 按关键词找文件、字符串那几道小题,都适合拿来练手。第三方库部分,qrcode 生成二维码、xlrd 指定 1.2.0 读 xlsx、pynput 监听键盘配合 playsound 按次数播放,都是能直接跑起来的小项目。尤其是提到播放音频会卡顿,再用多线程处理,这个思路很关键,不然监听和播放互相影响,体验会差很多。安装部分提醒 PATH 和 PyCharm 解释器也很实用,新手很容易卡在这里。期待后面命令行学生管理系统和 pyinstaller 打包的内容。
页: [1]
查看完整版本: Python标准库与第三方库实战:二维码Excel键盘监听