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

Day04:玩转标准库中的数据处理与日志记录

构建一个Python命令行工具:玩转标准库中的数据处理与日志记录

导语

刚从 iOS 转向 Python 开发的你,可能会被 Python 丰富的标准库惊艳到。本篇博客,我们将围绕 jsoncsvredatetimecollectionsargparselogging 等高频标准库,构建一个实用的命令行工具:它能分析文件中的关键词出现情况,并生成清晰的日志记录。这不仅巩固你对标准库的理解,也能为你的 Python 项目开发积累基础能力。


知识点预览

阅读本篇你将掌握:

  • 如何使用 argparse 构建命令行接口

  • 如何读取和处理 jsoncsv 文件

  • 使用 re 正则提取关键词信息

  • 利用 collections.Counter 进行词频统计

  • datetime 时间处理与 logging 日志记录的结合

  • 构建具备实用性的 CLI 工具结构


正文结构

背景介绍:为什么要掌握这些标准库?

Python 的强大很大程度上来源于其标准库的丰富性。在实际开发中,处理文本数据、日志记录、命令行参数解析都是必备技能。相比 iOS 更偏 UI 的开发,Python 更注重数据和脚本实用性,因此构建一个命令行数据处理工具将是你迈向后端或数据处理方向的起点。


技术方案拆解
  • argparse:构建 CLI 参数接口

  • json / csv:读取结构化数据文件

  • re:正则匹配关键词

  • Counter:快速统计词频

  • datetime:生成带时间戳的输出

  • logging:日志记录,便于排查问题


实战步骤讲解:关键词统计 CLI 工具
1. 项目结构
keyword_counter/
├── main.py               # CLI 主程序
├── utils.py              # 工具函数封装
├── sample.json           # 示例输入数据
├── logs/
│   └── run_20250701.log  # 日志文件输出

2. main.py 主入口(使用 argparse 和 logging)
import argparse
import logging
from utils import process_filedef setup_logger():logging.basicConfig(filename=f'logs/run_{__import__("datetime").datetime.now().strftime("%Y%m%d")}.log',level=logging.INFO,format='%(asctime)s - %(levelname)s - %(message)s')def main():parser = argparse.ArgumentParser(description="关键词计数工具")parser.add_argument("filepath", help="文件路径,支持 .json 或 .csv")parser.add_argument("keyword", help="要查找的关键词")args = parser.parse_args()setup_logger()logging.info("程序启动")process_file(args.filepath, args.keyword)logging.info("程序结束")if __name__ == "__main__":main()

3. utils.py 工具函数封装
import json
import csv
import re
from collections import Counter
from pathlib import Path
import loggingdef process_file(filepath, keyword):path = Path(filepath)if not path.exists():logging.error(f"文件不存在: {filepath}")print(f"[错误] 文件不存在:{filepath}")returnlogging.info(f"开始处理文件: {filepath}")if filepath.endswith(".json"):with open(filepath, "r", encoding="utf-8") as f:data = json.load(f)content = json.dumps(data)  # 统一转成字符串处理elif filepath.endswith(".csv"):with open(filepath, "r", encoding="utf-8") as f:reader = csv.reader(f)content = "\n".join([",".join(row) for row in reader])else:logging.error("不支持的文件格式")print("[错误] 只支持 .json 或 .csv 文件")returnmatches = re.findall(fr"\b{re.escape(keyword)}\b", content, flags=re.IGNORECASE)count = Counter(matches)print(f"🔍 在文件中找到 {len(matches)} 次关键词「{keyword}」")logging.info(f"关键词统计完成:{count}")

4. 示例运行(命令行)
python main.py sample.json apple

输出:

🔍 在文件中找到 4 次关键词「apple」

日志文件(logs/run_20250701.log)中:

2025-07-01 14:30:01,123 - INFO - 程序启动
2025-07-01 14:30:01,456 - INFO - 开始处理文件: sample.json
2025-07-01 14:30:01,789 - INFO - 关键词统计完成:Counter({'apple': 4})
2025-07-01 14:30:01,800 - INFO - 程序结束

常见问题与踩坑经验
问题解决方案
UnicodeDecodeError添加 encoding="utf-8" 打开文件
正则匹配大小写不敏感加上 flags=re.IGNORECASE
日志无输出或覆盖旧日志使用时间戳命名日志文件,或配置 filemode='a'
argparse 不生效确保是在 __name__ == "__main__" 中调用

拓展建议或进阶路径
  • 添加文件夹支持:使用 os.walk 递归处理多个文件

  • 增加图表输出:结合 matplotlib 可视化词频统计结果

  • 封装成可执行包:结合 setuptoolspoetry 打包为工具

  • 与日志服务对接:如输出到 ELK 日志平台


总结 & 实用建议

本篇文章带你一次性吃透多个 Python 常用标准库,并通过构建一个实用的命令行关键词统计工具实现落地。对于转型中的开发者而言,这种带实战导向的练习能迅速提升你对 Python 在数据处理、脚本自动化方面的掌控力。

📌 实用建议:

  • 每个标准库都有背后的使用场景,理解 > 死记

  • 推荐把工具封装为可重复使用的组件,逐步构建自己的代码仓库

  • 掌握日志记录,将极大提升你调试和维护 Python 项目的效率

http://www.lryc.cn/news/579075.html

相关文章:

  • Chart.js 安装使用教程
  • 基于SpringBoot和Leaflet的区域冲突可视化系统(2025企业级实战方案)
  • VC Spyglass:工具简介
  • React Native 开发环境搭建--window--android
  • 24年京东秋季笔试题
  • CSS外边距合并(塌陷)全解析:原理、场景与解决方案
  • flutter更改第三方库pub get的缓存目录;更改.gradle文件夹存放目录
  • 告别告警风暴:深入理解 Prometheus Alertmanager 的智能告警策略
  • 为什么星敏感器(Star Tracker)需要时间同步?—— 从原理到应用的全解析
  • 1-RuoYi框架配置与启动
  • 整流电路Multisim电路仿真实验汇总——硬件工程师笔记
  • qml实现 裁剪进度条
  • 使用案例 - 根据nuscenes-devkit工具读取nuscnes数据集
  • Active-Prompt:让AI更智能地学习推理的革命性技术
  • Ubuntu-18.04-bionic 的apt的/etc/apt/sources.list 更换国内镜像软件源 笔记250702
  • nacos 3 docker 快速部署
  • ES6从入门到精通:其他特性
  • Git 分支与远程仓库基础教学总结
  • 从模型部署到AI平台:云原生环境下的大模型平台化演进路径
  • 21、企业行政办公(OA)数字化转型:系统如何重塑企业高效运营新范式
  • 【Erdas实验教程】025:遥感图像辐射增强(雾霾去除)
  • 解决 npm install canvas@2.11.2 失败的问题
  • Go 语言开发中用户密码加密存储的最佳实践
  • Java 导出PDF 1、内容可以插入自定义表格 2、内容插入图片
  • python+uniapp基于微信小程序的南昌旅行指南系统nodejs+java
  • 时钟(6.25-26)
  • 快速说一下TDD BDD DDD
  • 【docker】修改 MySQL 密码后 Navicat 仍能用原密码连接
  • RabbitMQ使用topic Exchange实现微服务分组订阅
  • docker离线/在线环境下安装elasticsearch