实战项目(下)------ 项目优化、调试与未来学习路径
本周将对第7周的词频统计工具进行工程化升级 ,引入 日志记录、单元测试理念、代码规范 ,并教会学生如何调试 和规划下一步学习方向。
🗓 第8周 教学主题:项目优化 + 调试 + 学习路线规划
🎯 学习目标
- 能使用
logging模块替代print进行日志记录 - 理解单元测试的基本思想(使用
assert) - 掌握基础调试技巧(
print、日志、断点) - 理解 PEP8 代码风格并能使用工具检查
- 明确后续学习路径(Web / 数据 / 自动化等方向)
🕒 第15课:项目优化 ------ 日志、测试与健壮性(60分钟)
⏱ 时间分配建议
- 项目回顾(5分钟)
- 日志系统改造(20分钟)
- 添加简单测试(20分钟)
- 代码健壮性增强(10分钟)
- Q&A(5分钟)
📚 1. 用 logging 替代 print(更专业的输出控制)
✅ 优势:可分级(DEBUG/INFO/WARNING/ERROR)、可输出到文件、可开关
python
# text_utils.py(更新)
import logging
# 配置日志(通常在 main.py 中配置一次)
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s'
)
def read_text_file(filepath):
try:
with open(filepath, 'r', encoding='utf-8') as f:
logging.info(f"成功读取文件: {filepath}")
return f.read()
except FileNotFoundError:
logging.error(f"文件未找到: {filepath}")
return ""
except Exception as e:
logging.error(f"读取文件出错: {e}")
return ""
💡 在
main.py开头配置一次即可,所有模块共享日志器
📚 2. 添加简单"测试"(使用 assert)
虽然不是正式单元测试(如
pytest),但assert是快速验证逻辑的好方法
python
# test_utils.py(新增测试文件)
from text_utils import clean_text, count_words
def test_clean_text():
assert clean_text("Hello, World!") == "hello world"
assert clean_text("123!@#") == "123"
print("✅ clean_text 测试通过")
def test_count_words():
counter = count_words("apple banana apple")
assert counter["apple"] == 2
assert counter["banana"] == 1
print("✅ count_words 测试通过")
if __name__ == '__main__':
test_clean_text()
test_count_words()
📌 运行测试:
python test_utils.py
📚 3. 增强健壮性:处理空文件、全标点等情况
python
# text_utils.py
def count_words(text):
words = [word for word in text.split() if word.isalpha()] # 只保留纯字母词
if not words:
logging.warning("文本中未找到有效单词")
return Counter()
return Counter(words)
✅
word.isalpha()过滤掉 "123", "can't" 等(可按需调整)
📚 4. 支持输出到文件(扩展功能)
python
# main.py(新增参数)
parser.add_argument("--output", help="将结果保存到文件")
# 在输出处增加
output_str = format_output(top_words)
if args.output:
with open(args.output, 'w', encoding='utf-8') as f:
f.write(f"词频统计结果 - Top {args.top}\n")
f.write("-" * 40 + "\n")
f.write(output_str)
logging.info(f"结果已保存到 {args.output}")
else:
print(output_str)
✍️ 课堂练习(25分钟)
任务:
- 在项目中集成
logging- 编写
test_utils.py,至少测试2个函数- 添加
--output参数支持- 运行测试并生成带输出的日志
✅ 预期效果:
bash
python main.py sample.txt --top 3 --output result.txt
# 日志显示:INFO - 成功读取文件...
# INFO - 结果已保存到 result.txt
🕒 第16课:调试、代码规范与未来路线(60分钟)
⏱ 时间分配
- 调试技巧演示(15分钟)
- 代码风格与 PEP8(15分钟)
- 学习路线规划(20分钟)
- 课程总结 + 作品展示(10分钟)
📚 1. 调试(Debugging)三板斧
方法1:print 调试(快速但临时)
python
def clean_text(text):
print(f"[DEBUG] 原始文本: {repr(text)}") # repr 显示换行/空格
clean = text.lower().replace(",", "")
print(f"[DEBUG] 清洗后: {repr(clean)}")
return clean
方法2:logging.debug()
python
logging.basicConfig(level=logging.DEBUG) # 开启 DEBUG 级别
def clean_text(text):
logging.debug(f"输入文本长度: {len(text)}")
...
方法3:使用 IDE 断点(推荐 VS Code)
- 在代码行号左侧点击设置断点
- 按
F5启动调试 - 查看变量值、单步执行(Step Over / Into)
💡 演示:在
count_words中设断点,观察words列表
📚 2. 代码风格:PEP8 与自动检查
PEP8 是 Python 官方代码风格指南
常见规则:
- 缩进:4 个空格(不是 Tab)
- 行长 ≤ 79 字符
- 函数名:
snake_case - 类名:
PascalCase - 导入:标准库 → 第三方 → 本地模块,各组空一行
自动检查工具:pycodestyle(原 pep8)
bash
# 安装
pip install pycodestyle
# 检查
pycodestyle main.py
✅ 更强工具:
flake8(集成了 pycodestyle + pyflakes)
📚 3. 学习路线建议(根据兴趣选择)
| 方向 | 推荐下一步 | 典型项目 |
|---|---|---|
| 自动化脚本 | os, shutil, subprocess |
批量重命名、日志分析 |
| 数据分析 | pandas, matplotlib |
Excel 处理、数据可视化 |
| Web 开发 | Flask(轻量) |
个人博客、API 服务 |
| 爬虫 | requests, BeautifulSoup |
新闻聚合、价格监控 |
| 桌面应用 | tkinter(内置)或 PyQt |
记事本、计算器 |
🌟 建议:先做一个小项目,再学新库!
📚 4. 课程总结:8周成长回顾
| 周 | 核心能力 |
|---|---|
| 1 | 函数进阶 + 异常处理 |
| 2 | 数据结构 + 推导式 + 生成器 |
| 3 | 文件操作 + 模块化 |
| 4-5 | 面向对象编程(OOP) |
| 6 | 标准库 + 虚拟环境 |
| 7-8 | 项目开发 + 工程实践 |
✅ 你现在能:
- 编写结构清晰的 200+ 行 Python 脚本
- 使用虚拟环境管理依赖
- 开发命令行工具
- 调试和优化代码
🎁 课后彩蛋:初始化 GitHub 仓库
bash
git init
git add .
git commit -m "feat: 完成词频统计工具 v1.0"
# 上传到 GitHub(可选)
📌 作品 = 未来面试的敲门砖!
🧠 本周核心实践清单
| 技能 | 工具/方法 |
|---|---|
| 日志记录 | logging 模块 |
| 简单测试 | assert + 测试函数 |
| 调试 | print / logging.debug / IDE 断点 |
| 代码规范 | PEP8 + pycodestyle |
| 项目管理 | 虚拟环境 + requirements.txt + Git |
📝 最终任务(毕业项目)
完善你的词频统计器,并提交到 GitHub:
- 包含
README.md(说明如何使用)- 包含
requirements.txt- 代码符合基本 PEP8
- 至少有一个测试函数
示例 README 内容:
markdown# Word Counter 一个命令行词频统计工具。 ## 使用 ```bash python main.py article.txt --top 10 --output result.txt
🎯 恭喜完成8周 Python 强化训练!
你现在已具备 独立开发小型 Python 项目 的能力。下一步:动手做,持续写代码!