
在处理日志文件或非结构化文本数据时,我们经常面临将其转换为易于程序处理的结构化格式的需求。以机器故障和解决方案的文本文件为例,原始数据可能呈现如下模式:
Balancim de corte hidráulico (a) ponte Defect 01 – Máquina não liga Botão de emergência acionado Problema no pedal Defeito 02 – O martelo não vai para os lados Botão de emergência acionado ...
在这种结构中,一个机器标题下可能紧跟着多个缺陷及其对应的解决方案。这种连续的结构对解析带来了挑战:
为了克服上述挑战,一种高效且健壮的方法是对原始文本文件进行预处理,使其结构更加规整。核心思想是将每个“机器标题-缺陷-解决方案”作为一个独立的逻辑块,并在块之间使用空行(\n\n)进行分隔。这意味着,即使是同一台机器的第二个缺陷,也应重复机器标题。
这种结构优化带来了显著优势:
经过优化后的文本文件结构应类似于以下示例:
立即学习“Python免费学习笔记(深入)”;
Balancim de hidraulico (a) ponte Defeito 01 - Maquina nao liga Botao de emergencia acionado Balancim de hidraulico (a) ponte Defeito 02 - O martelo nao vai para os lados Botao de emergencia acionado Balancim de Corte hidraulico Braco (Tecnomaq) Defeito 01 - O martelo sobe e desce lento Filtro de óleo entupido Balancim de Corte hidraulico Braco (Tecnomaq) Defeito 02 - O martelo sobe todo e aumenta o ruido do balancim Operador regulou muito alto o martelo
一旦数据文件被优化为上述结构,使用Python进行解析就变得非常直接。我们将读取文件内容,首先按空行分割成各个逻辑块,然后对每个块内部进行处理,提取机器名称、缺陷描述和解决方案列表,最终构建一个嵌套字典。
import json # 用于美观地打印最终字典,非核心解析逻辑
# 假设文件名为 'manual.txt' 且已按照优化后的格式存储
file_path = 'manual.txt'
# 核心解析代码
def parse_machine_manual(file_path):
"""
解析优化后的机器故障手册文件,并将其转换为嵌套字典。
Args:
file_path (str): 机器故障手册文件的路径。
Returns:
dict: 结构化的嵌套字典,格式为
{'机器名称': {'缺陷描述': ['解决方案1', '解决方案2', ...]}}
"""
maqs_problem_solution = {}
try:
with open(file_path, 'r', encoding='utf-8') as manual:
manual_tpm = manual.read()
# 1. 按空行('\n\n')分割,获取每个“机器-缺陷-解决方案”的逻辑块
# 使用列表推导式过滤掉可能的空字符串块,并对每个块进行预处理
# strip() 用于去除块两端的空白字符,包括换行符
maqs_defeito_blocks = [
block.strip().split('\n')
for block in manual_tpm.split('\n\n')
if block.strip() # 确保块不是完全空的
]
for block_lines in maqs_defeito_blocks:
# 确保每个块至少包含机器名和缺陷描述
if len(block_lines) >= 2:
machine_name = block_lines[0].strip()
defect_description = block_lines[1].strip()
# 提取解决方案,并过滤掉空行
solutions = [sol.strip() for sol in block_lines[2:] if sol.strip()]
# 初始化机器字典,如果机器名尚未存在
if machine_name not in maqs_problem_solution:
maqs_problem_solution[machine_name] = {}
# 将缺陷和解决方案添加到对应的机器下
maqs_problem_solution[machine_name][defect_description] = solutions
else:
print(f"警告: 发现一个不完整的块,已跳过: {block_lines}")
except FileNotFoundError:
print(f"错误: 文件 '{file_path}' 未找到。")
except Exception as e:
print(f"解析文件时发生错误: {e}")
return maqs_problem_solution
# 调用函数进行解析
parsed_data = parse_machine_manual(file_path)
# 打印结果进行验证 (使用json模块美观打印)
print(json.dumps(parsed_data, indent=4, ensure_ascii=False))
文件读取与编码:
按块分割:
构建嵌套字典:
通过这种结构化的方法,即使面对大量非结构化文本数据,我们也能高效、准确地将其转换为易于程序化处理的结构化格式。
以上就是Python教程:将机器故障日志文件解析为结构化嵌套字典的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号