将新值添加到 txt 文件

Add new values to txt file

当用户启动我的机器人时,它会获取其用户 ID 并将其存储在 .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. 如果用户从未启动过机器人,它应该将其用户 ID 添加到 .txt 文件中。
  2. 如果用户已经 "registered",机器人应该打印一些文本让用户知道他们已经注册。

问题:

  1. 将用户 ID 添加到文件后,如果您用同一用户重试相同的命令,它会 returns 文本 "You have been added to my list :)",这意味着无法读取文件,以验证如果用户标识已经存在?
  2. 我与另一个用户进行了测试,机器人似乎删除了最后一个用户的值,将其替换为最新用户的用户 ID。我只想添加,而不是替换。

任何建议都会对我有很大帮助...

Python版本:3.6.5

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

问题中提供的代码每次('w+')写入数据并替换旧值。如果您必须检查以后的用户,我建议您维护一个包含 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]}