如何将用户输入保存到文本文件

时间:2020-04-18 14:59:06

标签: python

我正在尝试创建一个个人密码库。基本上,我想创建一个程序询问我要做什么,并根据我的输入(“新建”或“访问“此处的网站标题”),该程序可以让我添加带有相应用户名和密码的网站标题。然后在我输入“ 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()

4 个答案:

答案 0 :(得分:1)

首先,您没有读取文件。以“追加”(a)模式进行读写是一个坏主意(请参阅潜在的光标问题)。

我在Google Colab上测试了代码,并且可以正常工作。请注意,只有在关闭文件后才会进行写入。

建议:

  1. 现在是学习数据库的好时机。即使是简单的Excel文件也可以更好地满足您的目标(请检查软件包csv)。

  2. 使用“ a +”作为打开文件的方式:如果文件不存在,请创建它。

  3. 尝试每次更频繁地打开和关闭文件,例如,每次要写东西时。 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)模式打开的文件。

  • 现在附加模式通常用于附加数据,这里您既要读取又要写入 数据,因此您需要使用读写权限(r +)。
  • 第二,您正在尝试创建文件库,并且不对其进行任何加密。问题是 通过打开该文件,任何人都可以将其视为纯文本。

现在,将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链接。

这些是您的代码无法正常工作的主要问题

还有更多问题,例如

  • 您从文件中读取的方式
  • 您写入文件的方式
  • 没有错误处理
  • 您关闭文件的方式
  • 您处理文件的方式
  • 不加密
  • 安全问题
  • 等等。

但是目前,这将帮助您完成任务。

祝你好运和聪明的工作!