#python #python-3.x #discord.py
Вопрос:
Я хочу прочитать строки и проверить, есть ли в них определенное число, но при чтении и печати списка со строками я не могу получить 1-ю строку, в которой моя тестовая строка была написана той же программой:
Код, который я использую для записи материала в файл:
with open('db.txt', 'a') as f:
f.write(f'Request's channel id from guild {guild.id}:{request_channel_id} n')
и код, который я использую для чтения файлов и проверки строк, таков:
with open('db.txt', 'r') as f:
index = 0
for line in f:
index = 1
if str(message.guild.id) in line or str(message.channel.id) in line:
break
content = f.readlines()
print(content)
content = content[index]
content.strip(":")
Второй блок кода возвращает: [] и пустой список, хотя я открыл его, и строка там есть. Но когда я пишу прямо в файл с клавиатуры, код «видит» случайные вещи, которые я написал.
содержимое файла .txt:
Id do canal de request servidor 833434062248869899: 888273958263222332
a.a
all
a
a
a
a
Ошибка:
['a.an', 'n', 'alln', 'an', 'an', 'an', 'a']
Ignoring exception in on_message
Traceback (most recent call last):
File "C:UsersCARVALHOAppDataLocalProgramsPythonPython39libsite-packagesdiscordclient.py", line 343, in _run_event
await coro(*args, **kwargs)
File "C:UsersCARVALHOdesktopgabrielcodandomusic_botmain.py", line 48, in on_message
request_channel_id = int(content[1])
IndexError: string index out of range
Комментарии:
1. Вывод и сообщение об ошибке отображаются в вопросе как правильно отформатированный текст, а не как изображение или внешняя ссылка.
2. Строка
f.write(f'Request's channel id from guild {guild.id}:{request_channel_id} n')
должна содержать синтаксическую ошибку, замените ее наf.write(f'Request's channel id from guild {guild.id}:{request_channel_id} n')
3. Файловый объект запоминает, где он читал или писал в последний раз. Когда вы вызываете «f.readlines ()», он считывает и возвращает только строки после строки, которая выполнила условие if. Решение: Просто повторно используйте уже прочитанную «строку» после цикла for вместо вызова «readlines».
4. Я не знал о том, что файловый объект запоминает строки, которые он читал/писал, но это сработало. Спасибо! :)) И насчет»», которое может вызвать ошибку, в оригинале так не написано, я перевел с португальского, чтобы дать лучшее представление о том, что я пытался написать.