Вывод определенных данных из текстового файла
Дан текстовый файл - listaudio.txt (не json). В нем находятся, для примера, такие данные (их намного больше и у всех разные наименования):
{'id': 12345, 'owner_id': 67890, 'url': '', 'artist': 'ExampleArtist', 'title': 'ExampleTitle', 'duration': 320}, {'id': 45624, 'owner_id': 67890, 'url': '', 'artist': 'ExampleArtist2', 'title': 'ExampleTitle2', 'duration': 243}
нужно вывести только данные artist и title, т. е. вывод должен выглядеть так:
ExampleArtist - ExampleTitle
ExampleArtist2 - ExampleTitle2
Подскажите, как это сделать, используя python. Думал как-то реализовать через разделитель, но толкового из этого ничего не вышло
Ответы (2 шт):
Не JSON? Вроде бы это очень даже JSON, и, переведя данные в него, можно было бы значительно упростить реализацию. Но ладно.
Предполагаю, что вам нужен парсер, и его вы напишите сами. Под вашу задачу другой реализации быть не может.
Однако я накидал примерную реализацию с использованием re.
import re
data = "{'id': 12345, 'owner_id': 67890, 'url': '', 'artist': 'ExampleArtist', 'title': 'ExampleTitle', 'duration': 320}, {'id': 45624, 'owner_id': 67890, 'url': '', 'artist': 'ExampleArtist2', 'title': 'ExampleTitle2', 'duration': 243}"
keys = re.finditer("[\"'][A-Za-z0-9_]*[\"']", data)
request = ("artist", "title")
need = False
result = list()
for item in keys:
# Помним про наличие кавычек.
string = item.group()[1:-1]
if need:
result.append(string)
need = False
if string in request:
need = True
print(result)
['ExampleArtist', 'ExampleTitle', 'ExampleArtist2', 'ExampleTitle2']
С шаблонами (patterns) вам поможет вот этот сервис.
with open('my_file.txt') as processed_file:
my_string = processed_file.read()
my_tuple = eval(my_string)
for elements in my_tuple:
artist = elements['artist']
title = elements['title']
print(f"{artist} - {title}")