#python #python-3.x #dictionary #text-files
#python #python-3.x #словарь #текстовые файлы
Вопрос:
Привет, я пытаюсь преобразовать текстовый файл в словарь, но моим разделителем является пустая строка. Итак, пример части моих dummy.txt
данных выглядит примерно так:
Lorem ipsum dolor sit amet (consectetur adipiscin& elit)
2020-01-05 20:01:02
Lorem ipsum dolor sit amet
Lorem ipsum dolor sit amet
Lorem ipsum dolor sit amet
Lorem ipsum dolor sit amet
Lorem ipsum dolor
2019-01-30 12:21:50
Lorem ipsum Lorem ipsum
Lorem ipsum Lorem ipsum
Lorem ipsum Lorem ipsum Lorem
Таким образом, в основном он начинается с имени (которое иногда включает квадратные скобки), за которым следуют дата и время (согласно приведенному выше формату), за которыми следует любая дополнительная информация (которая может быть любой длины, например, количество строк, но содержит такие символы, как «/» и «,»). Наконец, это будет пустая строка, обозначающая конец первого набора данных.
Итак, мне нужно, чтобы это выглядело в форме словаря следующим образом:
{'Lorem ipsum dolor sit amet (consectetur adipiscin& elit)':'2020-01-05 20:01:02 Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet','Lorem ipsum dolor':'2019-01-30 12:21:50 Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem'}
Я пытался использовать подобный код, потому что не могу придумать ничего другого, что представляло бы разделитель пустой строки, кроме «n», но я знаю, что это неправильно, потому что n
это повлияло бы и на другие данные в том же наборе:
d = {}
with open("dummy.txt") as f:
for line in f:
(key, val) = line.split('n')
d[key] = val
print (d)
Будем признательны за любую помощь! Заранее благодарю
Ответ №1:
Вы почти на месте, вам нужно разделить весь файл на двойные новые строки, тогда ключом будет первая строка в этой группе, а значением — все остальные строки.
d = {}
with open("dummy.txt") as f:
for &roup in f.read().split('nn'):
key, *val = &roup.split('n')
d[key] = ' '.join(val)
print (d)
Результат:
{'Lorem ipsum dolor sit amet (consectetur adipiscin& elit)': '2020-01-05 20:01:02 Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet',
'Lorem ipsum dolor': '2019-01-30 12:21:50 Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem'}
Ответ №2:
Вам нужно разделить данные (файловый поток) на nn
, а затем каждый элемент должен быть разделен на n
. В соответствии со структурой ваших данных, первая строка в элементе является ключом, а остальные строки объединяются пробелом
Некоторые указатели
- Быть явным
- Установите режим для
with open
, даже если по умолчаниюr
- Используйте
dict()
вместо{}
, чтобы избежать путаницы сset
- Установите режим для
- Избегайте написания кучи кода в
with open
блоке. Извлеките данные и закройте файловый поток [start=0:stop=end:step=1]
это отличный способ получить «остальные элементы в списке»- Используйте
json.dumps
для печати красивого сообщения с вашими данными (indent
,sort_keys
)
import json
d = dict()
with open("dummy.txt", "r") as f:
data = f.read()
items = data.split("nn")
for item in items:
item_lines = item.split("n")
d[item_lines[0]] = " ".join(item_lines[1:])
print(json.dumps(d, indent=2, sort_keys=True))
Вывод
{
"Lorem ipsum dolor": "2019-01-30 12:21:50 Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem",
"Lorem ipsum dolor sit amet (consectetur adipiscin& elit)": "2020-01-05 20:01:02 Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet"
}