我想知道解析文本文件最有效的方法。 例如,假设我有以下文本文件:
服务器的连接数为:1
服务器状态为:ACTIVE
与服务器的连接数为:4
服务器状态为:ACTIVE
服务器没有响应:13:25:03
建立服务器连接:13:27:05
我想要做的是浏览文件并收集信息。例如,服务器的连接数或服务器停机的次数。我想将这些值保存在可能的列表中,以便我以后可以查看或绘制它们。
那么执行此操作的最佳方式是什么,假设我的关键字在列表中如下:
referenceLines = ['connections server', 'Server status', 'not responding']
请注意,我在列表中没有完整的句子,只是其中的一部分。我想逐行浏览文件,并检查读取行是否对应于referenceLines列表中的任何条目,如果是,请获取列表条目的索引并调用相应的函数。
执行此操作的最有效(时间,内存)方式是什么,因为典型的文本文件大小约为50MB。
谢谢。
任何
答案 0 :(得分:4)
每一行都用“:”分隔,你可以拆分字符串。
message, value = line.split(': ', 1)
答案 1 :(得分:1)
作为一种实用的方法,我建议您在一系列步骤中实施此操作,同时测量每个步骤的性能,以衡量您使用测试数据的方法的成本。
例如:
最佳解决方案取决于您的数据,例如,您使用的参考线数量,但在现代机器上只需几秒钟
答案 2 :(得分:1)
如果要解析的文本文件始终包含相同顺序的相同字段,则mikerobi的解决方案很好。否则,您需要遍历这些行并尝试检测referenceLines ...
答案 3 :(得分:1)
这是一种可能的方法。它使用'keyword1|keyword2'
形式的正则表达式模式一次搜索多个关键字。
def func1(line):
#do something
def func2(line):
#do something
actions = {'connections server': func1,
'Server status': func2}
regex = re.compile('|'.join(re.escape(key) for key in actions))
for line in file:
for matchobj in regex.finditer(line):
actions[matchobj.group()](line)