Извлечение значений из словаря в текстовый файл (журнал)

#python #dictionary

#python #словарь

Вопрос:

У меня есть output.log файл со следующим форматом:

 {'loss': 2.1327, 'learning_rate': 3.5e-05, 'epoch': 0.0}
{'loss': 2.1133, 'learning_rate': 4.9981292413606026e-05, 'epoch': 0.01}
{'loss': 2.1522, 'learning_rate': 4.994855413741657e-05, 'epoch': 0.01}
{'loss': 2.1394, 'learning_rate': 4.991581586122713e-05, 'epoch': 0.01}
{'loss': 2.1501, 'learning_rate': 4.9883077585037675e-05, 'epoch': 0.02}
 

Мне бы очень хотелось просто получить значения в файле журнала для построения графика и сделать это так:

 2.1327   3.5e-05                  0.0
2.1133   4.9981292413606026e-05   0.01
2.1522   4.994855413741657e-05    0.01
2.1394   4.991581586122713e-05    0.01
2.1501   4.9883077585037675e-05   0.02
 

Я действительно не уверен, как решить эту проблему или какой подход я должен попробовать / посмотреть.
Поскольку это текстовый файл, я попытался импортировать с помощью json и преобразовать строку в dictionary, а затем получить значения, но я получил сообщение об ошибке:

 JSONDecodeError: Expecting value: line 1 column 1 (char 0)
 

Я попытался добавить значения, но также получил ошибку:

 X,Y = [] , [] 
    for line in open(output.log, 'r'):
        values = [float(s) for s in line.split()]
        X.append(values[2])
        Y.append(values[0])

ValueError: could not convert string to float: "{'loss':"
 

Моя конечная цель — вывести значения, поэтому, возможно, может быть лучший способ их построения без необходимости сначала избавляться от текстов? Любые предложения или указания будут с благодарностью приняты.

Комментарии:

1. Может быть, просто попробуйте сначала заменить все ' на " , похоже str() , на python, если вам повезет, json может, возможно, загрузить его…

2. @UriyaHarpeness Спасибо за ваше предложение, я просто заменяю его на » «, однако это привело к той же ошибке..

Ответ №1:

Вы можете использовать json.loads после замены одинарных кавычек ' " кавычками после загрузки каждой строки:

 import json
X,Y = [] , [] 
for line in open('log.json', 'r'):
    x = json.loads(line.replace("'", '"'))
    values = [v for v in x.values()]
    X.append(values[2])
    Y.append(values[0])
    
print(X, Y)
 

Вывод:

 [0.0, 0.01, 0.01, 0.01, 0.02] [2.1327, 2.1133, 2.1522, 2.1394, 2.1501]