首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >解析混合数据类型矩阵日志文件

解析混合数据类型矩阵日志文件
EN

Stack Overflow用户
提问于 2020-11-18 19:05:55
回答 1查看 46关注 0票数 0

我试图解析一个复杂的日志文件和混合数据类型(示例文件)。( input_file.log)并提取每个类别的最小值和最大值。数据段被区分为id号。

输入日志文件:input_file.log

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-18 22:22:12

下面的内容有点令人费解,但getS的工作完成了,我想:

代码语言:javascript
运行
复制
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)

产出;

代码语言:javascript
运行
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64899717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档