【发布时间】:2018-07-06 22:17:07
【问题描述】:
我正在使用 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 文件中,它应该跳过这部分。如果您像这样删除“\n”:
text.write("buffer %s" %NewPassword)
它现在可以在您下次运行时正确跳过此步骤。有没有办法实现这种跳过,同时将用户输入部分写入不同的行?
【问题讨论】:
-
同一个文件不要打开两次,删除第一个
open。此外,适当地格式化您的代码。正如所写,它在语法上是不正确的。 -
首先,由于 IndentationErrors,此代码无法运行。其次,不清楚你的问题是什么。你能给我们一个样本输入和预期与实际输出吗?或者给出你正在谈论的代码的两个版本,以及每种情况下的实际输出?或类似的东西? (请确保您在此处发布的任何内容实际上确实重现了您所询问的行为。)
-
@DyZ 虽然这是一件很奇怪的事情,但我认为这实际上并不是造成问题的原因。在第二个(或者更确切地说,第四个)
open之后,旧文件对象再也不会被使用,因此尝试使用它会造成巨大混乱的事实实际上并不重要。 (当然,除了它使代码读起来非常混乱——尤其是在循环内为另一个变量重用循环变量名,但随后执行break这样也没关系......) -
@abarnert 对最初的缩进错误感到抱歉,现在已修复。我对此还是很陌生。添加文本以进一步阐明问题。
标签: python