使用python在.txt文件中写入两行不同的内容

使用python在.txt文件中写入两行不同的内容,python,Python,我正在使用python编写一个.txt文件。程序首先需要在第一行(在本例中为“缓冲区”)上添加一些内容,然后用户在其下的行中写入自定义输入。该程序当前看起来如下所示: try: text = open("myconfig.txt", "x") text = open("myconfig.txt", "w") text.write(" ") text.close() except FileExistsError: print("File already ex

我正在使用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文件中找到“缓冲区”,并不断重复初始写入过程。 程序有没有办法找到“buffer”一词,但仍然将第二部分写入它下面的行中? 先谢谢你。 编辑:为了进一步澄清问题,使用上面编写的代码至少两次,会在.txt文件中生成以下输出:

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


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

我想试着解释一下:

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

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

但这不是你要检查的。您正在检查每一行,以查看是否存在
缓冲区
,而不是整个文件

因此,第二次运行它时:对于第一行,即
“buffer\n”
“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()
不管怎样,如果我猜对了你的问题,这应该可以解决它

它仍然是相当混乱的代码。让多个文件对象同时引用同一个文件几乎总是一团糟。使用同一个变量来表示多个不同的值,特别是循环迭代变量和循环内部使用的变量,这是非常容易误导的。等等但是,我认为,如果你在打开下一个文件对象之后,碰巧再也不使用任何文件对象,你在重新分配循环变量之后立即中断了文件对象,等等。不过,最好还是尝试清理一下,这样显然是对的。例如:

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)

不要打开同一个文件两次,请删除第一个
open
。另外,适当地格式化代码。正如所写的,它在语法上是不正确的。第二,不清楚你的问题是什么。你能给我们一个输入和预期与实际输出的样本吗?或者给出您正在讨论的两个版本的代码,以及每种情况下的实际输出?或者…类似的?(请确保你在这里发布的任何内容都真实地再现了你所询问的行为。)@DyZ虽然这是一件非常奇怪的事情,但我认为这并不是问题的真正原因。在第二次(或者更确切地说,第四次)
open
之后,旧文件对象再也不会被使用,因此尝试使用它会造成巨大的混乱这一事实实际上并不重要。(当然,除此之外,读取代码会让人非常困惑,尤其是在循环中为另一个变量重用循环变量名的同时,但随后执行
中断
,因此这也无关紧要……@abarner最初对缩进错误表示歉意,现已修复。我在这方面还是个新手。增加了进一步澄清问题的文本。
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)