У меня есть файл json, из которого я извлекаю цитаты. Это файл из Kaggle (отформатированный точно так же).
Моя цель - извлечь все цитаты (только цитаты, а не авторов или другие метаданные) в простой текстовый документ , Первые 5 строк:
# Don't cry because it's over, smile because it happened.
# I'm selfish, impatient and a little insecure. I make mistakes, I am out of control and at times hard to handle. But if you can't handle me at my worst, then you sure as hell don't deserve me at my best.
# Be yourself; everyone else is already taken.
# Two things are infinite: the universe and human stupidity; and I'm not sure about the universe.
# Be who you are and say what you feel, because those who mind don't matter, and those who matter don't mind.
Проблема в том, что некоторые цитаты повторяются, и я хочу написать каждую цитату только один раз. Какой хороший способ записать только уникальные значения в текст do c?
Лучшее, что я придумал, было это:
import json
with open('quotes.json', 'r') as json_f:
data = json.load(json_f)
quote_list = []
with open('quotes.txt', 'w') as text_f:
for quote_object in data:
quote = quote_object['Quote']
if quote not in quote_list:
text_f.write(f'{quote}\n')
quote_list.append(quote)
Но кажется крайне неэффективным создавать и поддерживать отдельный список с 40 000 значений.
Я пытался чтение файла на каждой итерации функции записи, но каким-то образом чтение всегда возвращается пустым:
with open('quotes.json', 'r') as json_f:
data = json.load(json_f)
with open('quotes.txt', 'w+') as text_f:
for quote_object in data:
quote = quote_object['Quote']
print(text_f.read()) # prints nothing?
# if it can't read the doc, I can't check if quote already there
text_f.write(f'{quote}\n')
Хотелось бы понять, почему text_f.read () возвращается пустым, и что является более элегантным решением.