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' 不是内部或外部命令,说明 pip 没有加入 PATH,需要配置 PATH,或在重装 Python 时勾选 Add Python to PATH。安装后如果 PyCharm 仍找不到模块,检查 Settings -> Project -> Python Interpreter 是否选对解释器。
1. 生成二维码
安装 qrcode:代码:- import qrcode
- img = qrcode.make('我真帅')
- img.save('qrcode.png')
复制代码 运行后生成 qrcode.png,扫码即可看到内容。二维码本质是用黑白点阵表示字符串。
2. 用 xlrd 操作 Excel
读取 Excel 使用 xlrd,修改使用 xlwt。以 xlrd 为例,安装时要指定版本,因为最新版删除了 xlsx 支持:假设有 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[0],
- 'name': parts[1],
- 'gender': parts[2],
- 'className': parts[3]
- }
- students.append(student)
复制代码 在 main() 开头调用 load(),程序启动时恢复数据。
7. 打包成 exe
安装 pyinstaller:打包:-F 表示打包成单个 exe。完成后在 dist 目录下找到 exe,可拷贝到没有 Python 环境的机器上运行。
四、总结
标准库是 Python 自带,import 即可用,如 datetime、os;第三方库需要 pip install,如 qrcode、xlrd、pynput。实际开发中要善于搜索、阅读文档、利用现成库。学生管理系统案例串联了函数、列表、字典、文件操作、异常处理等知识,打包成 exe 可以让程序在没有 Python 环境的机器上运行。库是编程的外挂,善用库,才能把精力集中在真正要解决的问题上。 |