我试图解析一个复杂的日志文件和混合数据类型(示例文件)。( input_file.log)并提取每个类别的最小值和最大值。数据段被区分为id号。
输入日志文件:input_file.log
Type:
id: 12
range_max: 20.0
data1_mix: [inf, 29.7, 0.003, 0.0062, 0.00112]
data2_num: [129.7899, 0.01, 0.0003, 12.0]
Type:
id: 131
data1: 20.0
data1_mix: [inf, foo, inf, 9.7, 0.0001, 0.02, 0.01]
data2_num: [149.7899, 0.01, 0.03, 12.0]输出日志文件:output_file.log
Order: ID, min value data-1, max value data-2, min value data-1, max value data-2
output_file.log
12, 0.003, 29.7, 0.0003, 129.7899
13, 0.0001, 9.7, 0.01, 149.7899你能建议我如何解决这个问题吗?谢谢!
发布于 2020-11-18 22:22:12
下面的内容有点令人费解,但getS的工作完成了,我想:
input_file = """[the content of your input_file.log]"""
def is_number(s):
try:
complex(s)
except ValueError:
return False
return True
print(('ID, min value data-1, max value data-1, min value data-2, max value data-2'))
chunks = input_file.split('Type:\n')
for chunk in chunks[1:]:
lines = chunk.strip().splitlines()
line2 = lines[2].split('data1_mix: [')[1].replace('inf','xxx').replace(']','')
line2 = [float(d) for d in line2.split(',') if is_number(d)!= False]
line3=lines[3].split('data2_num: [')[1].replace(']','')
line3 = [float(d) for d in line3.split(',')]
s_row = ''
s_row = lines[0].split('id: ')[1]+',\t '+ str(min(line2))+',\t '+str(max(line2))\
+',\t '+str(min(line3))+',\t '+str(max(line3))
print(s_row)产出;
ID, min value data-1, max value data-1, min value data-2, max value data-2
12, 0.00112, 29.7, 0.0003, 129.7899
131, 0.0001, 9.7, 0.01, 149.7899https://stackoverflow.com/questions/64899717
复制相似问题