@animanshnik

Как вызывать по одной строке из txt?

Я не понимаю как доставать по одной строке из text.txt, вот код:
def admin(chatid, userid, text):
    print(2)
    if isadmin(chatid, userid):
        print(8)
        text[5:]
        if len(text.split()) > 1:
            candidat = text.split()[1].strip().lower()
            print(4)
            if candidat[:3] == '[id' and '|' in candidat:
                print(5)
                nid = candidat.split('|')[0][3:]
                if nid.isdigit():
                    print(6)
                    nid = int(nid)
                    hwid=('id'+str(nid))
                    print(hwid)
                    if hwid in open('text.txt').read():
                        send_message_to_chat(chatid, 'Айди уже существует в базе данных.')
                        return True
                        print('true')
        f=open('text.txt', 'a')
        f.write(hwid + '\n' )
        send_message_to_chat(chatid, 'Айди записан в базу администраторов')
    else:
        send_message_to_chat(chatid, 'Вы должны быть админом')

все записывается как вы поняли в text.txt в формате id + \n. когда там 1 айди, это понятно, все хорошечно, и отлично, но суть в том, что у меня проверка на админа. В данном случае:
def isadmin(chatid, userid,):
    members_data = vk.messages.getConversationMembers(peer_id=2000000000 + chatid)
    for i in members_data['items']:
        if userid == i['member_id']:
            with open('text.txt', 'r') as file:
                #ids=file.readlines()
                while True:
                    id=file.read()
                    print(id)
                    print(id)
                    if not id:
                        break
                print(id)
                send_message_to_chat(chatid, 'id')
                if 'is_admin' in i or userid == id:
                    print('true')
                    return True
                else:
                    print('false')
                    return False

Этот код сканирует на админа, и если все ок, он отправляет. А в нем есть фишка, что можно добавить левый id. Так вот, когда 1 айди, он вписывается, и зашибись. Но когда их 2+, они не вмещаются
  • Вопрос задан
  • 263 просмотра
Пригласить эксперта
Ответы на вопрос 2
kshnkvn
@kshnkvn
yay ✌️ t.me/kshnkvn
Я ничего не понял, что вам нужно, но прочитать построчно txt можно так:
id = f.read().split('\n')
На выходе у вас в id будет список. Проверять на значения можно очень просто:
>>> id = [1, 2, 3, 4, 5]
>>> if 5 in id:
...     print(True)
...
True


UPD. Только уберите while - он вам не нужен. read() считывает весь файл сразу.
Ответ написан
@antares4045
Вы же ищите метод readline?
P.S. Только помните о наличии \n и/или \r в конце возвращаемой им строки
P.P.S Хотя для наибольшей чистоты, решение заданного вами вопроса должно выглядеть как-нибудь вот так.
А в идеале, сразу "дружите" с sqlite.
Ответ написан
Ваш ответ на вопрос

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

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