【问题标题】:Parsing Mix data type matrix log file解析混合数据类型矩阵日志文件
【发布时间】:2021-03-02 02:42:45
【问题描述】:

我正在尝试解析复杂的日志文件和混合数据类型(示例文件。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

你能建议我如何解决这个问题吗? 谢谢!

【问题讨论】:

  • 两个data1_mix 行的结构不同。那是错字吗?如果不是,哪些部分是相关的?
  • @JackFleeting,这不是错字。在 data1_mix 和 data2_mix 中,相关部分只是从每一行中找到最小值和最大值,并丢弃输出文件中显示的其他信息。

标签: python file parsing matrix


【解决方案1】:

以下内容有些复杂,但我认为可以完成工作:

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.7899

【讨论】:

  • 不能读出日志文件而不是放内容吗?
猜你喜欢
  • 2014-09-10
  • 2020-10-09
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 2019-04-13
  • 1970-01-01
  • 2013-05-21
  • 1970-01-01
相关资源
最近更新 更多