Python 如何将用户输入保存到文本文件
我正在尝试创建个人密码保险库。基本上,我想创建一个程序,询问我想做什么,并根据我的输入(新建或访问“网站标题”),该程序可以让我添加一个带有相应用户名和密码的网站标题。然后,在我输入“访问…”时,我应该在访问输入后获得相对于网站的tite I输入返回的用户名和密码。OFC所有这些数据都将存储在一个文本文件中 问题:Python 如何将用户输入保存到文本文件,python,Python,我正在尝试创建个人密码保险库。基本上,我想创建一个程序,询问我想做什么,并根据我的输入(新建或访问“网站标题”),该程序可以让我添加一个带有相应用户名和密码的网站标题。然后,在我输入“访问…”时,我应该在访问输入后获得相对于网站的tite I输入返回的用户名和密码。OFC所有这些数据都将存储在一个文本文件中 问题: 问题是,当我检查文本文件时,它保持空白。我试图改变访问模式(a、r等),但它不起作用。不仅如此,程序还只返回最后输入的数据,而不返回select中的任何数据 记住我是个初学者 以下是
问题是,当我检查文本文件时,它保持空白。我试图改变访问模式(a、r等),但它不起作用。不仅如此,程序还只返回最后输入的数据,而不返回select中的任何数据 记住我是个初学者 以下是使用的代码:
vault = open("Passvault.txt", "a")
total = True
while total == True:
creation = True
action = input("What do you want to do? ")
if action == "New" or action == "new":
title = input("Add website: ")
username = input("Create username: ")
password = input("Create password: ")
vault.write("Title:" + username)
vault.write("\n")
vault.write("Username:" + username)
vault.write("\n")
vault.write("Password:" + password)
elif action == "Access " + title:
print(title)
print("Username: " + username)
print("Password: " + password)
creation = False
elif action == "Close":
creation = False
total = False
vault.close()
首先,您没有读取该文件。在“附加”(“a”)模式下读写是个坏主意(请参阅潜在的光标问题) 我在GoogleColab上测试了代码,它运行正常。请注意,只有在关闭文件时才会发生写入 建议:
csv
)with
子句可能有用()首先,在哪里定义
elif
条件中使用的变量title
。另一个问题是如何读取文件标题。第三,也是最重要的一点,您的问题明确提到的是,您没有看到保存的结果,这是因为您没有立即关闭文件,close
方法实际上写入所有数据并最终保存文件。关闭文件前保存数据的另一种方法是使用flush
方法。尝试以下代码:
vault = open("Passvault.txt", "a")
total = True
while total == True:
creation = True
action = input("What do you want to do? ")
if action.lower() == "new":
title = input("Add website: ")
username = input("Create username: ")
password = input("Create password: ")
vault.write("Title:" + username)
vault.write("\n")
vault.write("Username:" + username)
vault.write("\n")
vault.write("Password:" + password)
elif action == "Access " + title:
print(title)
print("Username: " + username)
print("Password: " + password)
creation = False
elif action == "Close":
creation = False
total = False
vault.close()
您没有在最后关闭文件。首先,您似乎有点困惑这里的一切是如何工作的,所以让我澄清一下,然后我将指出所有问题 首先创建变量vault并将其指定给通过附加(a)模式打开的文件
- 现在附加模式通常用于附加数据,在这里您需要读和写 因此您需要使用读写权限(r+)
- 其次,您正在尝试创建vault,但不以任何方式对其进行加密。问题是 任何人都可以通过打开该文件将其视为纯文本
- 这里的问题是,您可以直接执行
,以便循环继续 永远,您不需要为total赋值为True,因为它不需要 您可以使用,而执行True
关键字来中断循环,因此可以对其进行更改。你只是浪费了记忆 通过将变量赋值为Truebreak
action=='New
或action=='New',在这里您不需要包括
或`,尽管这没关系,也没有问题,但您可以做得更好。lower()是一个字符串方法,它将字母表中的所有字母小写
- 您可以在['new','create','n'..所有您想要的输入]中执行
if action.lower(),注意这里您不必包含“..…所有您想要的输入”,它只是告诉您需要将所有您想要条件为真的输入放在那里
- 或者您可以简单地执行
if action.lower()=“new”
.write()
不会直接写入。您必须调用.flush()
或通过.close()
关闭文件。但是请注意问题,您调用了.close()
,但最终调用了无限while循环。通过告诉while循环和close处于同一级别,可以判断close命令不在while循环中。如果必须将其放入while循环中,则需要将其缩进一点,就像while循环中的其他代码一样。但这也行不通,因为你关闭了文件,如果不重新打开它,你就不能重新使用它,所以你要么在while循环中放入打开和关闭的部分,要么使用.flush()
方法。这是您面临此类问题的最大缺陷
现在是elif conditon的时候了
在这里,您可以看到,如果操作=='Access'+title:,则在执行的条件下,这里有几个问题
- 首先,您可以直接将操作与访问进行比较,通过使用上面if条件中使用的list trich,您可以做得更好,并且可以使用
.lower()
方法
- 其次,使用title变量,注意只有当上述
if
co