Добавить новые значения в текстовый файл - PullRequest
2 голосов
/ 02 апреля 2020

Когда пользователь запускает мой бот, он получает свой идентификатор пользователя и сохраняет его в файле .txt.

def verify_id(update, context):
    __location__ = os.path.realpath(os.path.join(os.getcwd(), os.path.dirname(__file__)))
    f = open(os.path.join(__location__, 'users_list_file.txt'), 'w+')
    f_content = f.read().strip().split()
    registered = False
    user_id = str(update.message.from_user.id)
    if user_id in f.read():
          message_ok = "User already existing in DB"
          update.message.reply_text(message_ok)
          registered = True
    else:
        f.write(user_id)
        message_added = "You have been added to my list :)"
        update.message.reply_text(message_added)
    f.close()

Цели :

  1. Если пользователь никогда не запускал бота, он должен добавить свой идентификатор пользователя в файл .txt.
  2. Если пользователь уже «зарегистрирован», бот должен напечатать некоторый текст, сообщающий пользователю, что он уже зарегистрирован.

Проблемы :

  1. После добавления идентификатора пользователя в файл, если вы повторите ту же команду с тем же пользователем, он возвращает текст «Вы были добавлены в мой список :)», означая, что файл не может быть прочитан , чтобы проверить, существует ли уже идентификатор пользователя?
  2. Я тестировал с другим пользователем, и кажется, что бот стирает значение последнего пользователя, чтобы заменить его идентификатором пользователя самого последнего. Я хочу просто добавить, а не заменить.

Любое предложение действительно очень мне поможет ...

Python версия: 3.6.5

Ответы [ 2 ]

2 голосов
/ 02 апреля 2020

Код, указанный в вопросе, записывает данные каждый раз ('w+') и заменяет старое значение. Вместо того, чтобы поддерживать простую построчную запись, что всегда будет проблематично c, если вам придется проверять на более поздних пользователей, я бы посоветовал вам вести словарь со списком user_ids и обновлять при изменении списка и писать это и еще только сообщение отправлено.

Ниже приведен простой пример аналогичным образом:

import os
import json
def verify_id(user_id):
    if not os.path.exists("example_users.json"):
        users = {}
        users_list = []
    else:
        f = open("example_users.json")
        users = json.load(f)
        users_list = users["users"]

    if user_id not in users_list:
        users_list.append(user_id)
        users["users"] = users_list
        # Rewrite
        with open("example_users.json", 'w') as f:
            json.dump(users, f)
    else:
        #Some message
        print("Already present")

Ниже показано, как json будет выглядеть для некоторых пользователей:

{"users": [1, 132]}

Позволяет добавить того же пользователя:

verify_id(1)
Already present

Новый пользователь:

verify_id(123)
json updated: {"users": [1, 132, 123]}
2 голосов
/ 02 апреля 2020

with open('file_name.txt','a+') as file: file.write(data)

Флаг 'a' предназначен для добавления. 'w' запишет в файл, но перезапишет его содержимое. обратите внимание на использование with при открытии файлов. Таким образом, вам не нужно беспокоиться о закрытии файла после. принять к сведению, чтобы добавить символ новой строки для каждого оператора записи.

file.write('\n' + id)

https://docs.python.org/3/library/functions.html#open

...