@GloverVTR

Почему не срабатывает if? как это пофиксить?

def got_key_week():

    api_key ='6f8mg7tur3a13pp1bkrzf1yohcooxtuertjrkoyy'

    chat_id = 2002143587

    f = open('bot.txt', 'r+')

    fr = f.readlines()

    if str(chat_id) in f.read():

        dict_ = {}

        fr = f.readlines()

        for i in fr:

            a = i.split(':')

            a[0] = a[0][:-1]

            a[1] = a[1][1:-1]

            dict_[str(a[0])] = [a[1], a[2]]

        dict_[str(chat_id)[1]] = str(int(dict_[str(chat_id)][1]) + 7)

        f.close()

        f = open('C:/PYTHON/BOT/bot.txt', 'w+')

        for key, item in dict_.items():

            f.write(str(key) + ' : ' + str(item[0]) + ' : ' + str(item[1]))



    else: 

        f.write(f'\n{chat_id} : {api_key} : 7')

    f.close()

  

got_key_week()


Почему код не срабатывает при таком содержимом файла

2002143587 : 6f8mg7tur3a13pp1bkrzf1yohcooxtuertjrkoyy : 0
384172654 : 6f8mg7tur3a13pp1bkrzf1yohcooxtuertjrkoyy : 100
  • Вопрос задан
  • 165 просмотров
Пригласить эксперта
Ответы на вопрос 2
Vindicar
@Vindicar
RTFM!
Учи основы работы с файлами в питоне и включай голову.
Чтение и запись в файл производится по т.н. текущей позиции. При открытии файла текущая позиция стоит в начале файла, а при чтении/записи она смещается на длину прочитанного/записанного.
А теперь смотри что ты делаешь. У тебя есть вызов fr = f.readlines(). Он построчно прочитает всё содержимое файла в список, и сохранит список в переменную fr. При этом текущая позиция окажется в конце файла - ты же прочитал всё содержимое.
Как следствие, все дальнейшие вызовы read() и readlines() не смогут прочитать НИЧЕГО - ты уже в конце файла, дальше ничего нет. Они будут возвращать пустую строку или пустой список - а ты этого явно не ожидаешь.
Раз уж ты читаешь весь файл в fr - то и дальше работай не с файлом, а со списком fr. Ну и проверка на chat_id у тебя кривая - что, если так совпадёт, что твой chat_id будет содержаться внутри второго значения (токен)? Такое может произойти, хоть это и маловероятно.

Я бы посоветовал не выпендриваться со своим форматом данных в текстовике, а использовать модуль json. Он гораздо удобнее для хранения структурированной информации. А если указать правильные параметры при записи в файл, то полученный файл будет более-менее человеко-читаемым.
Ответ написан
pickHabr
@pickHabr
fullstack разработчик
Возьми содержимое файла и пропиши его в переменную file_content_test. Поменяй строку 6 на
if str(chat_id) in file_content_test:

Когда увидешь что результат не поменялся, то попробуй перед строкой 6 вывести
print(str(chat_id) in file_content_test)

И внезапно ты увидешь True.

Теперь когда мы выяснили, что твой if на самом деле отрабатывает тебе нужно закрыть этот вопрос и идти дебажить все что идет внутри условия
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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