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

导语

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


知识点预览

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

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

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

  • 玩转标准库:ossyspathlibshutil

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

一、背景与目标

日常开发中,我们经常面临批量处理本地文件(如重命名、转移、内容清洗等)的需求。为了避免每次手动操作,我们决定构建一个模块化的 Python 命令行脚本:

✅ 支持批量重命名文件

✅ 支持对指定目录中的 .txt 文件清洗内容

✅ 提供清晰的日志输出与异常捕获

✅ 可通过命令行参数控制行为


二、技术方案与模块组织

项目结构:
复制代码
batch_tool/
├── main.py              # 主运行脚本
├── myutils.py           # 自定义工具包
├── config.py            # 可选:存放配置信息
└── test_dir/            # 测试目录(含待处理文件)
模块化导入示例
python 复制代码
# main.py
from myutils import batch_rename, clean_txt_files
python 复制代码
# myutils.py
import os
import sys
from pathlib import Path
import shutil

三、代码实现详解

1. myutils.py - 编写通用工具模块
python 复制代码
# myutils.py

from pathlib import Path
import os

def 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 - 命令行入口脚本
python 复制代码
# main.py

import sys
from myutils import batch_rename, clean_txt_files

def main():
    if len(sys.argv) < 3:
        print("Usage: python main.py <command> <directory>")
        print("Commands: rename | clean")
        return

    command = 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为文件夹

shell 复制代码
(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 和模块拆分的结构,更在实战中学会了如何处理真实问题。未来你可以将这些工具进一步封装,服务更多自动化任务!

相关推荐
超级晒盐人37 分钟前
用落霞归雁的思维框架推导少林寺用什么数据库?
java·python·系统架构·学习方法·教育电商
AI_RSER1 小时前
第一篇:【Python-geemap教程(三)上】3D地形渲染与Landsat NDVI计算
开发语言·python·3d·信息可视化·遥感·gee
WSSWWWSSW2 小时前
Python编程基础与实践:Python循环结构基础
开发语言·python
im_AMBER2 小时前
学习日志25 python
开发语言·python·学习
Blossom.1182 小时前
基于深度学习的医学图像分析:使用DeepLabv3+实现医学图像分割
人工智能·python·深度学习·yolo·目标检测·机器学习·迁移学习
花酒锄作田4 小时前
[python]基于动态实例的命令处理设计
python
计算机毕设定制辅导-无忧学长5 小时前
InfluxDB 与 Python 框架结合:Django 应用案例(三)
开发语言·python·django
惜.己5 小时前
python中appium
开发语言·python·appium
小沈熬夜秃头中୧⍤⃝5 小时前
Python 入门指南:从零基础到环境搭建
开发语言·python
睿思达DBA_WGX5 小时前
Python 程序设计讲义(54):Python 的函数——函数概述
开发语言·python