Day 3:Python模块化、异常处理与包管理实战案例
导语
在软件开发中,模块化结构、异常处理机制、以及标准库的掌握,是将“会写代码”提升为“能构建系统”的关键标志。今天,我们将通过构建一个实用的命令行批量文件处理工具,全面掌握这三大能力。
知识点预览
-
如何使用
import
/from ... import ...
组织代码 -
编写属于自己的工具模块
myutils.py
-
掌握
try/except/finally
异常处理机制 -
玩转标准库:
os
、sys
、pathlib
、shutil
-
项目结构设计与包管理基本规范
一、背景与目标
日常开发中,我们经常面临批量处理本地文件(如重命名、转移、内容清洗等)的需求。为了避免每次手动操作,我们决定构建一个模块化的 Python 命令行脚本:
✅ 支持批量重命名文件
✅ 支持对指定目录中的.txt
文件清洗内容
✅ 提供清晰的日志输出与异常捕获
✅ 可通过命令行参数控制行为
二、技术方案与模块组织
项目结构:
batch_tool/
├── main.py # 主运行脚本
├── myutils.py # 自定义工具包
├── config.py # 可选:存放配置信息
└── test_dir/ # 测试目录(含待处理文件)
模块化导入示例
# main.py
from myutils import batch_rename, clean_txt_files
# myutils.py
import os
import sys
from pathlib import Path
import shutil
三、代码实现详解
1. myutils.py
- 编写通用工具模块
# myutils.pyfrom pathlib import Path
import osdef batch_rename(directory, prefix="file"):try:path = Path(directory)for idx, file in enumerate(path.iterdir()):if file.is_file():new_name = f"{prefix}_{idx}{file.suffix}"file.rename(path / new_name)print(f"Renamed: {file.name} -> {new_name}")except Exception as e:print(f"[Error] 批量重命名失败: {e}")def clean_txt_files(directory):try:path = Path(directory)for file in path.glob("*.txt"):with file.open("r", encoding="utf-8") as f:lines = f.readlines()cleaned = [line.strip() for line in lines if line.strip()]with file.open("w", encoding="utf-8") as f:f.write("\n".join(cleaned))print(f"Cleaned: {file.name}")except Exception as e:print(f"[Error] 清洗失败: {e}")
2. main.py
- 命令行入口脚本
# main.pyimport sys
from myutils import batch_rename, clean_txt_filesdef main():if len(sys.argv) < 3:print("Usage: python main.py <command> <directory>")print("Commands: rename | clean")returncommand = sys.argv[1]directory = sys.argv[2]if command == "rename":batch_rename(directory)elif command == "clean":clean_txt_files(directory)else:print(f"Unknown command: {command}")if __name__ == "__main__":main()
命令行中执行python3 main.py rename test
,其中test
为文件夹
(venv) (base) abc@appledeMacBook-Pro Python模块化 % python3 main.py
Usage: python main.py <command> <directory>
Commands: rename | clean
(venv) (base) abc@appledeMacBook-Pro Python模块化 % python3 main.py rename test
Renamed: 3333.txt -> file_0.txt
Renamed: 11111.txt -> file_1.txt
Renamed: 2222.txt -> file_2.txt
四、标准库亮点回顾
模块 | 用途 |
---|---|
os | 与操作系统交互(目录判断、路径处理) |
sys | 获取命令行参数 |
pathlib | 更现代的文件路径处理方式 |
shutil | 文件复制/移动(可拓展使用) |
实践建议
-
添加命令行参数支持使用
argparse
优化交互体验 -
封装为 Python CLI 工具包(使用
setup.py
) -
添加日志记录,保存处理过程到
log.txt
常见问题与建议
-
模块导入失败?
确保模块文件与主程序在同一目录,或使用 Python 包规范。 -
路径识别错误?
使用pathlib.Path.resolve()
获取绝对路径,避免相对路径错误。 -
编码问题?
使用 UTF-8 明确指定读写编码,避免乱码和异常。
总结与附录
模块化开发是 Python 编程的核心能力之一。通过本次实践,我们不仅理解了 import
和模块拆分的结构,更在实战中学会了如何处理真实问题。未来你可以将这些工具进一步封装,服务更多自动化任务!