我正在从事一个工程项目,在该项目中我使用了档案中的机器性能数据。机器大约每 5 秒生成一个数据集,然后该数据可在多个.txt
文件中按日期使用,每个文件包含以下格式的数据。下面显示的数据来自2013_04_17.txt
包含该特定日期所有性能数据的文件。
2013-04-27 00:00:05.011
V_1 100 V_2 26695 V_3 33197 V_4 c681 V_5 29532
V_6 4600 V_7 4606 V_8 4f55 V_9 5a V_10 8063 V_11 4300 V_12 4700
V_13 4504 V_14 4400 V_15 4202 V_16 255 V_17 4300 V_18 91 V_19 6f
V_20 300 V_21 14784
V_22 5.085 V_23 7.840 V_24 -8.061 V_25 36.961
2013-04-27 00:00:10.163
V_1 100 V_2 26695 V_3 33199 V_4 c681 V_5 29872
V_6 4600 V_7 4606 V_8 4f55 V_9 5a V_10 8063 V_11 4300 V_12 4700
V_13 4504 V_14 4400 V_15 4202 V_16 255 V_17 4300 V_18 91 V_19 6f
V_20 300 V_21 14790
V_22 5.085 V_23 7.840 V_24 -8.061 V_25 37.961
.....
我需要以表格格式或 CSV 格式查看此数据,以便能够生成性能图并检测任何异常情况。但是,我没有足够的 Python 编程经验来解析这个文本文件。
我看着大熊猫和正则表达式的一些想法,但一直未能取得理想的结果,我希望能有以表格形式或与头作为变量日期CSV文件数据,时间V_1
,V_2
,V_3
,等以及随后的行作为每 5 秒获得的所有值。
您可以从文件中一次读取一个令牌开始:
with open('2013_04_17.txt') as infile:
for line in infile:
for token in line.split():
print(token)
之后,您只需要创建一个状态机来记住您所在的部分,并在找到结束时处理每个部分:
def process_record(timestamp, values):
"""print CSV format"""
print(','.join([timestamp] + values))
with open('t.txt') as infile:
timestamp = None
values = []
for line in infile:
line = line.strip()
if timestamp is None:
timestamp = line
elif not line: # blank line is separator
process_record(timestamp, values)
timestamp = None
values = []
else:
values.extend(line.split()[1::2])
if timestamp is not None: # process last record, no separator after it
process_record(timestamp, values)
这为您提供了 CSV 输出:
2013-04-27 00:00:05.011,100,26695,33197,c681,29532,4600,4606,4f55,5a,8063,4300,4700,4504,4400,4202,255,4300,91,6f,300,14784,5.085,7.840,-8.061,36.961
2013-04-27 00:00:10.163,100,26695,33199,c681,29872,4600,4606,4f55,5a,8063,4300,4700,4504,4400,4202,255,4300,91,6f,300,14790,5.085,7.840,-8.061,37.961
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句