@ubirust

Как записать в python значение в txt, если этого значения в нём нет?

Приветствую! Нужно в txt файл записывать id новых объявлений. Есть код, когда вставляешь команду file.write, то просто втупую записывается id объявления, если даже этот айдишник уже есть. Если команду file.write убрать, то всё правильно показывается, есть данный id или нет.

По факту нужно такое условие: если такое id есть, то ничего не происходит (можно написать "Есть id"), если такого id в txt файле нет, то его нужно записать.
Вот код, который работает не так как надо. id_ob_avito берется через парсинг новых объявлений, так-что можно свои значения поставить, так как суть не в этом.

with open("baza.txt", "r+") as file:

    for line in file:
        if id_ob_avito in line:
            print("Есть id авито")
        if id_ob_avito not in line:
            print("Нет id авито")
            file.write(f'{id_ob_avito}\n')
  • Вопрос задан
  • 108 просмотров
Решения вопроса 1
AlexNest
@AlexNest Куратор тега Python
Работаю с Python/Django
Нужно просто включить хоть капельку логики.
Допустим, есть файл вида и нужный id - 315:
765
454
315

Приведенный код проверяет наличие id в файле и, что куда более важно, выполняет запись, построчно:
В первой строке есть нужный id? Нет? -Записываем.
Во второй есть? Что, тоже нет? Записываем.
В третьей есть? Ну так и быть - пропустим.

Решением "в лоб" будет изменение кода так, чтобы в цикле выполнялась только проверка. И если id есть, то код это запоминал. А запись производилась бы уже по завершению цикла.
Более оптимальных решений два:
  • Хранить id в виде json-файла и при открытии этого файла преобразовывать этот json в структуру данных python (список или словарь). А проверить наличие значения что в списке, что в словаре можно одной строчкой.
  • Использовать СУБД (например встроенную в python sqlite) и проверять id запросом (хотя чисто для хранения id этот вариант избыточен)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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