当前位置: 首页 > news >正文

Day 3:Python模块化、异常处理与包管理实战案例

导语

在软件开发中,模块化结构、异常处理机制、以及标准库的掌握,是将“会写代码”提升为“能构建系统”的关键标志。今天,我们将通过构建一个实用的命令行批量文件处理工具,全面掌握这三大能力。


知识点预览

  • 如何使用 import / from ... import ... 组织代码

  • 编写属于自己的工具模块 myutils.py

  • 掌握 try/except/finally 异常处理机制

  • 玩转标准库:ossyspathlibshutil

  • 项目结构设计与包管理基本规范

一、背景与目标

日常开发中,我们经常面临批量处理本地文件(如重命名、转移、内容清洗等)的需求。为了避免每次手动操作,我们决定构建一个模块化的 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 和模块拆分的结构,更在实战中学会了如何处理真实问题。未来你可以将这些工具进一步封装,服务更多自动化任务!

http://www.xdnf.cn/news/1077049.html

相关文章:

  • A模块 系统与网络安全 第三门课 网络通信原理-3
  • 【C++】inline的作用
  • 若依中复制到剪贴板指令的使用v-clipboard
  • js严格模式和非严格模式
  • 【Python基础】13 知识拓展:CPU、GPU与NPU的区别和联系
  • 【科研绘图系列】基于R语言的复杂热图绘制教程:环境因素与染色体效应的可视化
  • SeaTunnel 社区月报(5-6 月):全新功能上线、Bug 大扫除、Merge 之星是谁?
  • 基于Spring Cloud微服务架构的API网关方案对比分析
  • 3.1.1.9 安全基线检查项目九:检查是否设置限制su命令用户组
  • [C#] WPF - 自定义样式(Slider篇)
  • 位运算经典题解
  • ELK日志分析系统(filebeat+logstash+elasticsearch+kibana)
  • Python 库 包 nltk (Natural Language Toolkit)
  • 视频断点续播全栈实现:基于HTML5前端与Spring Boot后端
  • 141.在 Vue 3 中使用 OpenLayers Link 交互:把地图中心点 / 缩放级别 / 旋转角度实时写进 URL,并同步解析显示
  • 【Maven 】 <resources> 配置中排除 fonts/** 目录无效,可能是由于以下原因及解决方案:
  • 计算机网络(二)应用层HTTP协议
  • (LangChain)RAG系统链路向量存储之Milvus(四)
  • 【1.4 漫画PostgreSQL高级数据库及国产数据库对比】
  • 【MyBatis保姆级教程下】万字XML进阶实战:配置指南与深度解析
  • 2025年6月28和29日复习和预习(C++)
  • JVM调优实战 Day 15:云原生环境下的JVM配置
  • SQLite与MySQL:嵌入式与客户端-服务器数据库的权衡
  • sqlmap学习ing(2.[第一章 web入门]SQL注入-2(报错,时间,布尔))
  • C++ 第四阶段 STL 容器 - 第九讲:详解 std::map 与 std::unordered_map —— 关联容器的深度解析
  • 解决安装UBUNTU20.04 提示尝试将SCSI(0,0,0),第一分区(sda)设备的一个vfat文件系统挂载到/boot/efi失败...问题
  • poi java设置字体样式
  • 数据结构day4——栈
  • WPF学习笔记(18)触发器Trigger
  • Cypher 是 Neo4j 专用的查询语言