Поскольку файл не в стандартном формате, о котором я знаю, вам придется перебирать его и составлять строки самостоятельно.
#!/usr/bin/env python3
import json
data = []
row_data = None
with open("example.txt") as example:
for row in example:
row = row.strip()
if not row: # ignore newlines
continue
if row == "User": # We have a new row and the last one is finished
if row_data:
data.append(row_data)
row_data = {}
continue
key, value = row.split(": ")
row_data[key] = value
data.append(row_data) # The last row is determined by the EOF not "User"
with open("example.json", "w") as jsonfile:
json.dump(data, jsonfile)
with open("example.json") as jsonfile:
print(json.load(jsonfile))
Результат:
[{'Name': 'John', 'Office': '1st Ave', 'Birth date': '1978-01-01'}, {'Name': 'Jane', 'Office': '2nd Ave', 'Birth date': '1970-01-01'}]
Объяснение того, что происходит:
Создайте новый список data
, в котором будут размещены наши строки. Установите row_data
на None
, который будет использоваться в наших проверках позже ..
Мы убираем каждый ряд (это может быть необязательно, но кажется, что это не повредит).
Если строка ""
, мы пропустим ее, чтобы игнорировать все эти избыточные символы новой строки.
Если строка «Пользователь», это означает, что мы должны построить новую строку. Это также означает, что мы должны добавить последний ряд, если он у нас есть. Это будет происходить дважды с примером текста, который вы дали. Мы инициализируем пустой dict.
Для каждой второй строки, которую мы просто разделяем на «:», чтобы получить наш ключ и значение, мы добавляем этот ключ и значение к нашему row_data
, пока не встретим другую строку «Пользователь».
Мы делаем это еще раз после того, как перебрали файл, чтобы получить последний ряд. Поскольку у нас не будет проверки «Пользователь», чтобы полагаться на добавление этой строки.
Мы открываем json и сбрасываем, как вы уже делали. Я открываю его, чтобы распечатать его для примера.