我正在尝试创建一个个人密码库。基本上,我想创建一个程序询问我要做什么,并根据我的输入(“新建”或“访问“此处的网站标题”),该程序可以让我添加带有相应用户名和密码的网站标题。然后在我输入“ Access ...”时,我应该获得在Access输入后返回的用户名和密码,该用户名和密码相对于我输入的网站名称。 OFC所有这些数据都将存储在文本文件中。
问题: 问题是当我检查文本文件时,它保持空白。我尝试更改访问模式(a,r等),但不起作用。不仅如此,该程序还只返回最后输入的数据,而不返回选择中的任何数据。
请记住,我是一个初学者。
下面是使用的代码:
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()
答案 0 :(得分:1)
首先,您没有读取文件。以“追加”(a)模式进行读写是一个坏主意(请参阅潜在的光标问题)。
我在Google Colab上测试了代码,并且可以正常工作。请注意,只有在关闭文件后才会进行写入。
建议:
现在是学习数据库的好时机。即使是简单的Excel文件也可以更好地满足您的目标(请检查软件包csv
)。
使用“ a +”作为打开文件的方式:如果文件不存在,请创建它。
尝试每次更频繁地打开和关闭文件,例如,每次要写东西时。 with
子句也可能有用(https://docs.python.org/3/tutorial/inputoutput.html#reading-and-writing-files)
答案 1 :(得分:0)
首先,在哪里定义在title
条件下使用的变量elif
。另一个说明您如何读取标题文件。您的问题明确提到的第三个也是最重要的一点是,您没有看到保存结果,这是因为您没有立即关闭文件,而close
方法实际上写入了所有数据并最终保存了文件。关闭文件之前保存数据的另一种方法是使用flush
方法。
答案 2 :(得分:0)
尝试以下代码:
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()
您没有在最后关闭文件。
答案 3 :(得分:0)
首先,您似乎对这里的一切工作有点困惑,所以让我澄清一下,然后指出所有问题。
您首先创建一个变量库,并将其分配给通过append(a)模式打开的文件。
现在,将total设置为True,然后将其用于无限while循环。
while True
,以便继续循环
永远,并且您不需要为total分配True,因为它不需要
可以更改,因为您可以使用break
关键字退出循环。你只是浪费记忆
通过将变量分配给True 现在在while循环中,您创建了创建变量,但从未将其用于某个目的,因此我认为不需要它,或者您可能有另一个计划,将来可能会使用它,所以我不再赘述。
现在,您可以从用户那里获取输入并将其值设置为动作变量。此步骤是可以的,但是我不想澄清这里有几个安全问题,但是由于它们非常复杂,因此在这里我不会告诉他们,但这应该是可以的。
现在是条件时间:
现在首先检查条件是否为action == 'New
或action =='new', here you don't need to include
或`,尽管可以,并且没有问题,您可以做得更好。 .lower()是一种字符串方法,它会小写字母的所有字母。
您可以执行if action.lower() in ['new' , 'create' , 'n' ....all inputs you want ]
,请注意此处不必包括“ .....所有想要的输入”,它只是告诉您您需要在上面放置所有输入您希望条件为真。
或者您可以简单地if action.lower() == 'new'
现在只有在条件为真时,此代码才能运行
您创建了title变量并将其设置为用户输入,现在这里存在太多的安全性问题,但是由于复杂性,我将不再赘述。永远记住,无论您何时与应用程序进行用户交互,那里都存在安全问题的机会。
然后您将获得密码和相同的问题。但也请注意,您此处未加密任何内容。那是个大问题。
现在,您将所有内容都写入了文件,但是请注意,.write()
不会直接写入。您必须调用.flush()
或通过.close()
关闭文件。但是请注意这个问题,您叫.close()
,但最后却进入了无限while循环。您可以通过告知while循环和close处于同一级别来判断close命令不在while循环中。如果必须将其放入while循环中,则需要像在while循环中的其他代码一样缩进一点。但这也行不通,因为您关闭了文件,并且无法通过重新打开来重用它,因此您可以将打开和关闭部分都放入while循环中,或者使用.flush()
方法。这是您正遇到此类问题的最大错误。
现在是Elif条件的时间
在这里您看到在if action == 'Access ' + title:
的情况下,这里存在一些问题。
首先,您会看到直接将操作与访问进行比较,并且可以使用上面if条件中使用的列表Trich来做得更好,并且可以使用.lower()
方法
第二,您使用title变量,该变量仅在上述if
条件运行时才被定义。如果上述if
条件没有运行怎么办,而用户直接说“访问Google”又是什么呢,或者接受了以上if
条件的东西,例如“#^%&GJ”,那么elif条件将运行并且您的变量标题将不会被python查找,然后您的程序将崩溃。因此最好先搜索一下,如果输入内容包含Access并将其分为Access And关键字,则可以使用以下几个功能例如.strip()
或其他。请访问this链接以获取更多方法。
第三,您正在使用文件光标而没有意识到它。就像任何文本编辑器中的光标一样,文件处理程序也具有一个光标,该光标会在您读取文件时向前移动,最后它将到达文件的末尾,再次读取时,它将不会返回任何内容,因为前面没有任何内容它。要了解更多信息,请访问this链接。
这些是您的代码无法正常工作的主要问题
还有更多问题,例如
但是目前,这将帮助您完成任务。
祝你好运和聪明的工作!