@AnKus

Как корректно дописывать в файл на Python?

Делаю парсер по расписанию, который будет дописывать новые контакты в существующий файл, а так же в отдельный файл только новые контакты. Уперся в то, что при записи новые строки пишуться не в единичном экзепрляре, а по несколько повторений сразу. Т.е. первый новый контакт мне записывает 10 раз, второй 20, третий 30 и тд. Как это исправить ? Для примера, чтоб не ломать код самого парсера, написал неольшой новый код, вместо блока парсинга, воспользовался библиотекой RandomWords. Вот собственно сам код:
import schedule
from random_word import RandomWords
import asyncio

new_words = []
old_words = []


async def working():
    word = RandomWords().get_random_word()
    with open('old_words.txt', 'r') as f:
        lines = [line.strip() for line in f.readlines()]
        for _ in lines:
            if word in old_words:
                continue
            else:
                new_words.append(word)
        print(word)
    return new_words, old_words
    

async def writer():
    with open('old_words.txt', 'a') as f:
        for line in new_words:
            f.write(f'{line}\n')
    with open('new_words.txt', 'a') as f:
        for line in new_words:
            f.write(f'{line}\n')


async def gather():
    tasks = []
    tasks.append(asyncio.create_task(working()))
    tasks.append(asyncio.create_task(writer()))
    await asyncio.gather(*tasks)
    

def main():     
    asyncio.run(gather())


if __name__ == "__main__":
    schedule.every(2).seconds.do(main)
    while True:
        schedule.run_pending()
  • Вопрос задан
  • 134 просмотра
Пригласить эксперта
Ответы на вопрос 1
@AlbertForest
for _ in lines:
    if word in old_words:
        continue
    else:
        new_words.append(word)


В этом куске ты как бы говоришь:
- "Добавь word в new_words столько раз, сколько строк в old_words.txt"
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы