Преобразование файла журнала словаря в csv с использованием 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?

вас волнует порядок столбцов?

saquintes 12.12.2020 12:34

Кроме того, массив, который у вас есть в вашем выводе, имеет запятые, что, вероятно, испортит любые программы чтения csv.

saquintes 12.12.2020 12:35

На самом деле я просто хочу преобразовать файл журнала в форме словаря в таблицу Excel. В виде столбцов, содержащих значения

Bayu Prasetya 12.12.2020 12:47

Так что я должен преобразовать его в csv правильно? или есть другой способ?

Bayu Prasetya 12.12.2020 12:47
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
4
306
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Просто для ясности: запрошенный вами пример вывода не соответствует типичному стилю «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.

файлы:

'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%

Другие вопросы по теме