使用python在.txt文件中写入2条不同的行

时间:2018-07-06 22:17:07

标签: python

我正在使用python写入.txt文件。该程序需要首先在第一行中添加一些内容(在本例中为“缓冲区”),然后由用户在其下一行中编写自定义输入。该程序当前如下所示:

try:
    text = open("myconfig.txt", "x")
    text = open("myconfig.txt", "w")
    text.write(" ")
    text.close()
except FileExistsError:
    print("File already exists")
text = open("myconfig.txt", "rt")
for line in text:
    if "buffer" not in line:
        NewPassword = input("Create a new Password: ")
        text = open("myconfig.txt", "a")
        text.write("buffer \n%s" % NewPassword)
        text.close()
        break
pass

问题是该程序应该首先在.txt文件中检查单词“ buffer”,如果该文件存在于.txt中,它将跳过书写部分。如果您删除\ n以更改其写入内容,则效果很好。添加\ n后,似乎不再在.txt文件中找到“缓冲区”,并且继续重复初始写入过程。 程序是否有办法找到“缓冲区”一词,但仍将第二部分写到它下面的行中? 先感谢您。 编辑:为进一步阐明问题,使用上面至少写的代码两次,将以下输出输出到.txt文件中:

 buffer 
 adminbuffer 
 admin

其中“ admin”是用户输入的文本。现在应该发生的事情是它应该只写入一次,并且如果.txt文件中已经存在单词“ buffer”,则应该跳过这一部分。如果您这样删除“ \ n”:

text.write("buffer %s" %NewPassword)

现在,下次运行它时,它会正确跳过此步骤。有没有一种方法可以实现这种跳过,但又可以将用户输入部分写到另一行上?

1 个答案:

答案 0 :(得分:0)

我将尝试解释一下:

第一次运行代码时,它会正确地看到该文件只是一个空格,因此它要求输入密码,并将buffer \n添加到该空格行,然后将密码写在下一行。

第二次运行代码时,您希望它看到buffer已经存在并且什么也不做。

但这不是您要检查的内容。您正在检查每行,以查看是否有buffer,而不是整个文件。

因此,第二次运行它:对于第一行" buffer \n""buffer"在该行中,因此它什么也不做。对于第二行(即用户密码),"buffer"可能不在密码中。因此,它要求输入新密码并再次附加。

如果要检查"buffer"是否出现在文件中的任何位置,有两种方法可以实现。

首先,检查每一行,仅在未找到"buffer"的情况下进行写作:

for line in text:
    if "buffer" in line:
        break
else:
    NewPassword = input("Create a new Password: ")
    text = open("myconfig.txt", "a")
    text.write("buffer \n%s" % NewPassword)
    text.close()

或者,由于此文件很容易变小到足以将整个内容读取到内存中,因此请执行以下操作:

if "buffer" not in text.read():
    NewPassword = input("Create a new Password: ")
    text = open("myconfig.txt", "a")
    text.write("buffer \n%s" % NewPassword)
    text.close()

无论哪种方式,如果我正确地猜到了您的问题,都应该可以解决。

它仍然是令人困惑的代码。具有多个文件对象同时引用同一文件几乎总是一团糟。使用相同的变量表示多个不同的值(尤其是循环迭代变量和循环内部使用的变量)会产生误导。等等。但是我认为您可以避免所有这些事情-打开下一个对象后,您碰巧不再使用任何文件对象,在重新分配循环变量后立即break,依此类推。清理它,所以显然是正确的。例如:

try:
    with open("myconfig.txt", "x") as text:
        text.write(" ")
except FileExistsError:
    print("File already exists")

with open("myconfig.txt", "r") as text:
    hasbuffer = "buffer" in text.read()

if not hasbuffer:
    NewPassword = input("Create a new Password: ")
    with open("myconfig.txt", "a") as text:
        text.write("buffer \n%s" % NewPassword)
相关问题