【问题标题】:Converting Dictionary log file into csv using python使用python将字典日志文件转换为csv
【发布时间】:2021-03-23 15:20:33
【问题描述】:

我要转换日志文件,这里是日志文件:

{'convolution': 2, 'cov2d_layers': [256, 256], 'fc_layers': 3, 'neurons': [256, 128, 1024], 'optimizer': 'rmsprop'}
Accuracy: 46.63%
{'convolution': 3, 'cov2d_layers': [128, 32, 128], 'fc_layers': 3, 'neurons': [1024, 1024, 1024], 'optimizer': 'adam'}
Accuracy: 39.57%
...

我需要一个完整的 csv 文件,如下所示:

convolution, conv2d_layers, fc_layers, neurons, optimizer, accuracy
2, [256,256], 3, [256, 128,1024], 46,63%

如何使用 python 脚本来做到这一点?

【问题讨论】:

  • 你关心列的顺序吗?
  • 加上你在输出中的数组有逗号,这可能会弄乱任何 csv 阅读器。
  • 其实我只是想把字典形的日志文件转换成excel表格。以包含值的列的形式
  • 所以我必须将其转换为 csv 对吗?还是有其他方法?

标签: python csv tensorflow type-conversion logfile


【解决方案1】:

请明确一点:您请求的示例输出不符合典型的“csv”样式(逗号分隔值)。同样,输入的日志文件也只是部分符合 json 风格。

读取日志文件

import itertools
import json

data = [];
with open('in.txt', 'r') as file:
    for line1,line2 in itertools.zip_longest(*[file]*2):
        line1 = line1.replace('\'','"')      #convert to json
        line2 = line2.split(':')[-1].strip() #extract number

        d = json.loads(line1) #create dictionary
        d['accuracy'] = line2 #add manually

        data.append(d)

创建 csv

在您的情况下,我建议您根据您的自定义样式将字典中包含的数据转换为字符串格式。

dlm = ';'
with open('out.txt','w') as file:
    bheader = True
    for d in data:
        #header
        shead = list( d.keys() )
        if bheader: 
            file.write( dlm.join( shead ) + '\n' )
            bheader=False
        #data
        sdata = ['%s'%e for e in d.values() ]
        file.write( dlm.join(sdata) + '\n' ) 

优秀

正如您的评论所暗示的那样,您希望之后将数据导入到 Excel 中。为了实现这一点,您可以使用 excel 导入对话框并告诉它使用分隔符“;” (如上所用)。在您的示例中,您还转换了小数分隔符;您可以指定“。”导入期间的分隔符或之后在 excel 中转换整个列。

请注意,在 excel 中访问“神经元”的数组元素可能很困难。

文件

'in.txt'

{'convolution': 2, 'cov2d_layers': [256, 256], 'fc_layers': 3, 'neurons': [256, 128, 1024], 'optimizer': 'rmsprop'}
Accuracy: 46.63%
{'convolution': 3, 'cov2d_layers': [128, 32, 128], 'fc_layers': 3, 'neurons': [1024, 1024, 1024], 'optimizer': 'adam'}
Accuracy: 39.57%

'out.txt'

convolution;cov2d_layers;fc_layers;neurons;optimizer;accuracy
2;[256, 256];3;[256, 128, 1024];rmsprop;46.63%
3;[128, 32, 128];3;[1024, 1024, 1024];adam;39.57%

【讨论】:

    【解决方案2】:

    下面

    import json
    import ast
    
    log_lines = []
    headers = None
    with open('data.txt') as f:
        lines = [l.strip() for l in f.readlines()]
        for idx, l in enumerate(lines, 1):
            if idx % 2 != 0:
                d = ast.literal_eval(l)
                if not headers:
                    headers = list(d.keys())
                    headers.append('accuracy')
            else:
                d['accuracy'] = l[l.rfind(' '):]
                log_lines.append(list(d.values()))
    
    with open('log.txt', 'w') as f:
        f.write(';'.join(headers) + '\n')
        for line in log_lines:
            line = [str(x) for x in line]
            f.write(';'.join(line) + '\n')
    

    数据.txt

    {'convolution': 2, 'cov2d_layers': [256, 256], 'fc_layers': 3, 'neurons': [256, 128, 1024], 'optimizer': 'rmsprop'}
    Accuracy: 46.63%
    {'convolution': 3, 'cov2d_layers': [128, 32, 128], 'fc_layers': 3, 'neurons': [1024, 1024, 1024], 'optimizer': 'adam'}
    Accuracy: 39.57%
    

    log.txt

    convolution;cov2d_layers;fc_layers;neurons;optimizer;accuracy
    2;[256, 256];3;[256, 128, 1024];rmsprop; 46.63%
    3;[128, 32, 128];3;[1024, 1024, 1024];adam; 39.57%
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-02
      • 2017-09-13
      • 2022-01-25
      • 2018-01-14
      • 1970-01-01
      • 2021-07-24
      相关资源
      最近更新 更多