#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]