【发布时间】:2017-11-02 21:50:28
【问题描述】:
我想使用 .txt 文件来存储应用程序的 API 令牌,但我在试图找到一种方法来替换文件中的 API 密钥/令牌时遇到了困难。这是尝试过的代码(Python 3.5):
data_to_save = {}
data_to_save['savetime'] = str(datetime.datetime.now())[:19]
data_to_save['api_key'] = key_submitted
data_to_save['user'] = uniqueid
api_exists = False
user_exists = False
with open("databases/api_keys.txt", 'r+') as f:
database = json.loads(f.read())
for i in database:
if i['api_key'] == key_submitted:
send_text_to_user(userid, "[b]Error: That API key is already in use.[/b]", "red")
api_exists = True
if i['user'] == uniqueid:
user_exists = True
if user_exists == True:
if api_exists = True:
send_text_to_user(userid, "[b]Error: Your API key was already saved at another time.[/b]", "red")
else:
f.write(json.dumps(data_to_save)) #Here, StackOverflow
send_text_to_user(userid, "[b]Okay, I replaced your API key.[/b]", "green")
f.close()
if user_exists == False:
writing = open("databases/api_keys.txt", 'a')
writing.write(json.dumps(data_to_save))
writing.close()
我也想知道这是否是最好的方法,或者代码可以优化以及如何优化。
谢谢,已经搞定了。最终代码:
data_to_save = {'savetime': str(datetime.datetime.now())[:19], 'api_key': key_submitted, 'user': uniqueid}
with open("databases/api_keys.txt", 'r') as f:
database = json.loads(f.read())
for i in database:
if i['user'] == uniqueid:
database.remove(i)
if i['api_key'] == key_submitted:
send_text_to_user(userid, "[b]Error: That API key is already in use.[/b]", "red")
api_exists = True
break
if not api_exists:
database.append(data_to_save)
f.write(json.dumps(database)
send_text_to_user(userid, "[b]Okay, your API key was succesfully stored.[/b]")
使用这种方法,我们甚至不需要编写不同的保存,以防万一用户存在或不存在,因为如果找到它就会删除它,所以当代码运行时它永远不会存在,它只需要保存一个每次都“新”记录,除非 API 密钥已经属于另一个用户。
【问题讨论】:
-
if api_exists = True-if语句中不允许赋值