查看: 1967|回复: 3

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

[复制链接]
发表于 昨天 11:00 | 显示全部楼层 |阅读模式
Python 的库通常分为标准库和第三方库:标准库随 Python 安装,import 后即可使用;第三方库需要额外用 pip 安装。本文按标准库常用模块、第三方库安装与实战、命令行学生管理系统、pyinstaller 打包的顺序,整理 datetime、os、qrcode、xlrd、pynput、playsound 等库的落地用法。

一、标准库常用模块
1. 日期计算
datetime 可以直接做日期减法,结果为 timedelta。
  1. import datetime
  2. date1 = datetime.datetime(2012, 2, 14)
  3. date2 = datetime.datetime(2022, 7, 12)
  4. print(date2 - date1)
复制代码
输出为 3801 days, 0:00:00。这个例子可用于计算两个日期相差多少天。

2. 字符串操作
字符串是内置类型,很多方法不用导入模块。
翻转单词顺序:
  1. def reverse_words(s):
  2.     tokens = s.split()
  3.     tokens.reverse()
  4.     return ' '.join(tokens)
  5. print(reverse_words('I am a student.'))
复制代码
输入 I am a student.,输出 student. a am I。思路是按空白切分成单词,反转列表后再用空格拼接。
判断旋转字符串:
  1. def rotate_string(s, goal):
  2.     return len(s) == len(goal) and goal in s + s
  3. print(rotate_string('abcde', 'cdeab'))
复制代码
如果 goal 是 s 旋转若干次后的结果,那么 goal 一定存在于 s+s 中,同时长度必须相等。
统计是给定字符串前缀的字符串数目:
  1. def count_prefixes(words, s):
  2.     res = 0
  3.     for word in words:
  4.         if s.startswith(word):
  5.             res += 1
  6.     return res
  7. print(count_prefixes(['a', 'b', 'c', 'ab', 'bc', 'abc'], 'abc'))
复制代码
这里用 s.startswith(word) 判断前缀,符合条件的字符串会累加计数。

3. 文件查找工具
指定搜索路径和关键词,查找文件名中包含关键词的文件。
  1. import os
  2. input_path = input('请输入待搜索路径:')
  3. pattern = input('请输入待搜索关键词:')
  4. for dirpath, dirnames, filenames in os.walk(input_path):
  5.     for f in filenames:
  6.         if pattern in f:
  7.             print(f'{dirpath}/{f}')
复制代码
os.walk 返回三元组:当前路径、目录名列表、文件名列表。遍历 filenames 即可对文件名做包含判断。

二、第三方库安装与实战
遇到需求时,先搜索适合的库,再用 pip 安装。pip 是 Python 内置包管理器,PyPI 用于收集第三方库。常用命令:
  1. pip install 库名
复制代码
如果提示 'pip' 不是内部或外部命令,说明 pip 没有加入 PATH,需要配置 PATH,或在重装 Python 时勾选 Add Python to PATH。安装后如果 PyCharm 仍找不到模块,检查 Settings -> Project -> Python Interpreter 是否选对解释器。

1. 生成二维码
安装 qrcode:
  1. pip install qrcode[pil]
复制代码
代码:
  1. import qrcode
  2. img = qrcode.make('我真帅')
  3. img.save('qrcode.png')
复制代码
运行后生成 qrcode.png,扫码即可看到内容。二维码本质是用黑白点阵表示字符串。

2. 用 xlrd 操作 Excel
读取 Excel 使用 xlrd,修改使用 xlwt。以 xlrd 为例,安装时要指定版本,因为最新版删除了 xlsx 支持:
  1. pip install xlrd==1.2.0
复制代码
假设有 d:/test.xlsx,求 101 班平均分:
  1. import xlrd
  2. xlsx = xlrd.open_workbook('d:/test.xlsx')
  3. table = xlsx.sheet_by_index(0)
  4. nrows = table.nrows
  5. count = 0
  6. total = 0
  7. for i in range(1, nrows):
  8.     class_id = table.cell_value(i, 1)
  9.     if class_id == 101:
  10.         total += table.cell_value(i, 2)
  11.         count += 1
  12. print(f'平均分:{total / count}')
复制代码
代码打开第一张工作表,nrows 取总行数,从第 1 行开始跳过表头;第 1 列是班级,第 2 列是分数。

3. 监听键盘按键,自动播放音频
需求:每按键 10 次,播放一个音频。安装指定版本:
  1. pip install pynput==1.6.8
  2. pip install playsound==1.2.2
复制代码
准备 ding.mp3 放在同级目录。基础实现:
  1. from pynput import keyboard
  2. from playsound import playsound
  3. count = 0
  4. def on_release(key):
  5.     global count
  6.     print(key)
  7.     count += 1
  8.     if count % 10 == 0:
  9.         playsound('ding.mp3')
  10. listener = keyboard.Listener(on_release=on_release)
  11. listener.start()
  12. listener.join()
复制代码
播放音频会导致按键卡顿。可以用多线程改进:
  1. from pynput import keyboard
  2. from playsound import playsound
  3. from threading import Thread
  4. count = 0
  5. def on_release(key):
  6.     global count
  7.     print(key)
  8.     count += 1
  9.     if count % 10 == 0:
  10.         t = Thread(target=playsound, args=('ding.mp3',))
  11.         t.start()
  12. listener = keyboard.Listener(on_release=on_release)
  13. listener.start()
  14. listener.join()
复制代码
把播放动作放到子线程,监听回调不再等待音频播放结束。

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

1. 入口函数
  1. import sys
  2. import os
  3. students = []
  4. def menu():
  5.     print('1. 新增学生信息')
  6.     print('2. 显示所有同学信息')
  7.     print('3. 根据名字查找学生信息')
  8.     print('4. 删除学生信息')
  9.     print('0. 退出程序')
  10.     choice = input('请输入您的选择:')
  11.     return int(choice)
  12. def main():
  13.     print('+----------------------------+')
  14.     print('| 欢迎来到学生管理系统! |')
  15.     print('+----------------------------+')
  16.     while True:
  17.         choice = menu()
  18.         if choice == 0:
  19.             sys.exit()
  20.         elif choice == 1:
  21.             insert()
  22.         elif choice == 2:
  23.             show()
  24.         elif choice == 3:
  25.             find()
  26.         elif choice == 4:
  27.             delete()
  28.         else:
  29.             print('您的输入有误!请重新输入!')
  30. if __name__ == '__main__':
  31.     main()
复制代码

2. 新增学生
  1. def insert():
  2.     print('[新增学生] 开始!')
  3.     student_id = input('请输入学生的学号:')
  4.     name = input('请输入学生的姓名:')
  5.     gender = input('请输入学生的性别:')
  6.     if gender not in ('男', '女'):
  7.         print('性别不符合要求!新增学生失败!')
  8.         return
  9.     class_name = input('请输入学生的班级:')
  10.     student = {
  11.         'studentId': student_id,
  12.         'name': name,
  13.         'gender': gender,
  14.         'className': class_name
  15.     }
  16.     global students
  17.     students.append(student)
  18.     save()
  19.     print('[新增学生] 完毕!')
复制代码

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

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

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

6. 存档与读档
约定存档文件为 d:/record.txt,每行一个学生,字段用制表符分隔。
存档:
  1. def save():
  2.     with open('d:/record.txt', 'w', encoding='utf8') as f:
  3.         for s in students:
  4.             f.write('{}\t{}\t{}\t{}\n'.format(s['studentId'], s['name'], s['gender'], s['className']))
  5.     print(f'[存档成功] 共存储了 {len(students)} 条记录!')
复制代码
读档:
  1. def load():
  2.     if not os.path.exists('d:/record.txt'):
  3.         return
  4.     global students
  5.     students = []
  6.     with open('d:/record.txt', 'r', encoding='utf8') as f:
  7.         for line in f:
  8.             line = line.strip()
  9.             if not line:
  10.                 continue
  11.             parts = line.split('\t')
  12.             student = {
  13.                 'studentId': parts[0],
  14.                 'name': parts[1],
  15.                 'gender': parts[2],
  16.                 'className': parts[3]
  17.             }
  18.             students.append(student)
复制代码
在 main() 开头调用 load(),程序启动时恢复数据。

7. 打包成 exe
安装 pyinstaller:
  1. pip install pyinstaller
复制代码
打包:
  1. pyinstaller -F 学生管理系统.py
复制代码
-F 表示打包成单个 exe。完成后在 dist 目录下找到 exe,可拷贝到没有 Python 环境的机器上运行。

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

使用道具 举报

发表于 昨天 19:00 | 显示全部楼层

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

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

使用道具 举报

发表于 昨天 19:10 | 显示全部楼层

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

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

使用道具 举报

发表于 昨天 19:20 | 显示全部楼层

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

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

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

Hacking Group 021A

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

关注微信公众号

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2026-9-19 17:21 , Processed in 0.021501 second(s), 17 queries , Gzip On, Redis On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部