今日目标:DevOps 日常工作本质上就是”处理文本”。今天我们将学习如何用 Python 优雅地读写 JSON/YAML 配置文件,并用 正则表达式 (Regex) 提取复杂的日志信息。今天不只是写代码,而是要彻底理解 “为什么 JSON/YAML 是配置的标准格式”、“正则表达式如何高效匹配文本” 以及 “如何避免常见的文件处理陷阱”。
学习内容 (30 mins)
在开始写代码前,先搞懂这些核心概念,否则后面的代码你会看得云里雾里。结构化数据处理 (15 mins)
结构化数据处理 (15 mins)
什么是结构化数据?结构化数据是指有固定格式的数据,如 JSON、YAML、CSV。这些格式都有明确的语法规则,便于程序解析。为什么需要不同的数据格式?
- JSON:
- 优点:轻量级、易读、广泛支持(API 响应、配置文件)
- 缺点:不支持注释、格式较严格
- 应用:API 响应、配置文件、数据交换
- YAML:
- 优点:支持注释、可读性强、支持多行字符串
- 缺点:缩进敏感、解析较慢
- 应用:Kubernetes 配置、Docker Compose、CI/CD 配置
- CSV:
- 优点:简单、Excel 兼容、适合大数据
- 缺点:不支持嵌套结构、类型推断困难
- 应用:数据导出、报表生成、数据分析
- JSON:内置库
json,无需安装 - YAML:第三方库
PyYAML,需要pip install pyyaml - CSV:内置库
csv,无需安装
正则表达式 (15 mins)
正则表达式 (15 mins)
什么是正则表达式?正则表达式(Regular Expression,简称 Regex)是一种描述字符串模式的语法,用于匹配、查找、替换文本。为什么需要正则表达式?
- 精确匹配:可以匹配复杂的文本模式(如 IP 地址、邮箱、日期)
- 批量处理:一次匹配多个模式,比字符串方法更强大
- 日志分析:从日志中提取关键信息(IP、时间、错误信息)
- 数据清洗:清理和格式化数据
\d+:匹配一个或多个数字(如:123、4567)\w+:匹配一个或多个单词字符(字母、数字、下划线).*?:非贪婪匹配任意字符(尽可能少匹配)\s+:匹配一个或多个空白字符(空格、制表符、换行)^:匹配字符串开头$:匹配字符串结尾():捕获组,用于提取匹配的内容
re.search():查找第一个匹配(返回 Match 对象或 None)re.findall():查找所有匹配(返回列表)re.sub():替换匹配的文本re.match():从字符串开头匹配(类似^pattern)
代码任务 (90 mins)
1
环境准备
确保虚拟环境已激活,并安装必要的包:
2
任务 A:JSON 文件处理
编写 代码解释:验证步骤:
10_json_demo.py,演示 JSON 的读写操作。json.dump():将字典写入文件json.load():从文件读取 JSON 并解析为字典json.dumps():将字典转换为 JSON 字符串json.loads():将 JSON 字符串解析为字典
- 检查
config.json文件是否创建 - 查看文件内容:
cat config.json - 确认 JSON 格式正确(缩进、引号等)
3
任务 B:YAML 文件处理
编写 代码解释:验证步骤:
10_yaml_demo.py,演示 YAML 的读写操作。yaml.safe_load():安全加载 YAML(推荐,防止代码执行)yaml.dump():将字典写入 YAML 文件default_flow_style=False:使用块样式,更易读
- 检查
config.yaml文件是否创建 - 查看文件内容:
cat config.yaml - 确认 YAML 格式正确(缩进、注释等)
4
任务 C:正则表达式实战
编写 正则表达式详解:验证步骤:
10_regex_demo.py,演示正则表达式的使用。\d+:一个或多个数字\.:转义的点号(匹配字面量.)\w+:一个或多个单词字符.*?:非贪婪匹配任意字符():捕获组,用于提取匹配内容\s:空白字符
- 脚本能正常运行,无语法错误
- 观察匹配结果是否正确
- 确认捕获组提取的内容正确
- 确认文本替换功能正常
拓展任务 (30 mins)
挑战 1:pathlib 实践
任务:使用
pathlib 库列出当前目录下所有的 .py 文件。提示:挑战 2:日志分析器
任务:编写一个日志分析器,从 Nginx 日志中统计:
- 每个 IP 的访问次数
- 每个状态码的出现次数
- 最常访问的 URL
今日产出物
10_json_demo.py- JSON 处理示例10_yaml_demo.py- YAML 处理示例10_regex_demo.py- 正则表达式示例config.json- 生成的 JSON 配置文件config.yaml- 生成的 YAML 配置文件
参考代码
查看参考代码
在 GitHub 查看完整的示例代码
在线运行
使用在线编辑器测试代码
实际应用场景
文件处理在运维中的应用
- 配置管理:读取和更新应用配置文件(JSON/YAML)
- 数据导出:将监控数据导出为 CSV 格式
- API 集成:解析 API 返回的 JSON 响应
- 日志分析:从日志文件中提取关键信息
正则表达式在运维中的应用
- 日志解析:从日志中提取 IP、时间、错误信息
- 数据清洗:清理和格式化数据
- 文本替换:批量替换配置文件中的内容
- 模式匹配:验证输入格式(如邮箱、IP 地址)
上一天: 数据结构进阶
Day 09 | 数据结构与装饰器
下一天: 系统调用
Day 11 | Python 调用 Shell