Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将用户输入保存到文本文件_Python - Fatal编程技术网

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

Python 如何将用户输入保存到文本文件,python,Python,我正在尝试创建个人密码保险库。基本上,我想创建一个程序,询问我想做什么,并根据我的输入(新建或访问“网站标题”),该程序可以让我添加一个带有相应用户名和密码的网站标题。然后,在我输入“访问…”时,我应该在访问输入后获得相对于网站的tite I输入返回的用户名和密码。OFC所有这些数据都将存储在一个文本文件中 问题: 问题是,当我检查文本文件时,它保持空白。我试图改变访问模式(a、r等),但它不起作用。不仅如此,程序还只返回最后输入的数据,而不返回select中的任何数据 记住我是个初学者 以下是

我正在尝试创建个人密码保险库。基本上,我想创建一个程序,询问我想做什么,并根据我的输入(新建或访问“网站标题”),该程序可以让我添加一个带有相应用户名和密码的网站标题。然后,在我输入“访问…”时,我应该在访问输入后获得相对于网站的tite I输入返回的用户名和密码。OFC所有这些数据都将存储在一个文本文件中

问题:
问题是,当我检查文本文件时,它保持空白。我试图改变访问模式(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上测试了代码,它运行正常。请注意,只有在关闭文件时才会发生写入

建议:

  • 现在是学习数据库的好时机。即使是一个简单的Excel文件也能更好地满足您的目标(请检查软件包
    csv

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

  • 试着更频繁地打开和关闭文件,比如说,每次你想写东西的时候。另外,
    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,然后将其用于无限while循环

    • 这里的问题是,您可以直接执行
      ,而执行True
      ,以便循环继续 永远,您不需要为total赋值为True,因为它不需要 您可以使用
      break
      关键字来中断循环,因此可以对其进行更改。你只是浪费了记忆 通过将变量赋值为True
    现在,在while循环中,您创建了创建变量,但从未将其用于某个目的,因此我认为它不是必需的,或者您可能有另一个计划,将来可能会使用它,所以我不会对此进行说明

    现在,您从用户处获得输入,并将其值设置为action变量。这一步是可以的,但我不想澄清这里有几个安全问题,但因为它们非常复杂,所以我不会在这里告诉他们,但这应该是可以的

    现在是条件成熟的时候了:

    现在在第一个if条件中,您检查is
    action=='New
    或action=='New'
    ,在这里您不需要包括
    或`,尽管这没关系,也没有问题,但您可以做得更好。lower()是一个字符串方法,它将字母表中的所有字母小写

    • 您可以在['new','create','n'..所有您想要的输入]中执行
      if action.lower(),注意这里您不必包含“..…所有您想要的输入”,它只是告诉您需要将所有您想要条件为真的输入放在那里

    • 或者您可以简单地执行
      if action.lower()=“new”

    仅当条件为真时,此代码才会运行

    您创建title变量并将其设置为用户输入,现在这里有太多的安全问题,但由于复杂性,我不会深入讨论。请始终记住,无论您在哪里与应用程序进行用户交互,都有可能出现安全问题

    然后你得到了密码和同样的问题。但是还要注意,这里没有加密任何内容。这是个大问题

    现在,您可以将所有内容写入文件,但请注意,
    .write()
    不会直接写入。您必须调用
    .flush()
    或通过
    .close()
    关闭文件。但是请注意问题,您调用了
    .close()
    ,但最终调用了无限while循环。通过告诉while循环和close处于同一级别,可以判断close命令不在while循环中。如果必须将其放入while循环中,则需要将其缩进一点,就像while循环中的其他代码一样。但这也行不通,因为你关闭了文件,如果不重新打开它,你就不能重新使用它,所以你要么在while循环中放入打开和关闭的部分,要么使用
    .flush()
    方法。这是您面临此类问题的最大缺陷

    现在是elif conditon的时候了

    在这里,您可以看到,如果操作=='Access'+title:
    ,则在执行
    的条件下,这里有几个问题

    • 首先,您可以直接将操作与访问进行比较,通过使用上面if条件中使用的list trich,您可以做得更好,并且可以使用
      .lower()
      方法

    • 其次,使用title变量,注意只有当上述
      if
      co