簡體   English   中英

使用 python 將字典日志文件轉換為 csv

[英]Converting Dictionary log file into csv using python

我想轉換日志文件,這里的日志文件:

{'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 腳本執行此操作?

需要明確的是:您請求的示例 output 不符合典型的“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 中轉換整個列。

請注意,可能很難訪問 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%

以下

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%

日志.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%

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM