我试图删除一行匹配的变量。但是,它正在清除文件。
a_file = open("./Variables/TxtFile.txt", "r")
lines = a_file.readlines()
a_file.close()
new_file = open("./Variables/TxtFile.txt", "w")
for line in lines:
if line.strip("n") == VariableStore:
new_file.write(line)
new_file.close()
目标是删除与VariableStore匹配的行,而不是删除整个文本文件
关于我对你原始帖子的评论。只有在匹配要删除的行时才写入文件,然后关闭文件。
这似乎不是你想要的。
您可能希望更改if
条件,以便在与您想要删除的行不匹配的情况下执行,即if not line.strip("n") == VariableStore:
,并在循环后关闭文件,即在与for
循环相同的级别上。
试试下面这些建议:
a_file = open("./Variables/TxtFile.txt", "r")
lines = a_file.readlines()
a_file.close()
new_file = open("./Variables/TxtFile.txt", "w")
for line in lines:
if not line.strip("n") == VariableStore:
new_file.write(line)
new_file.close()
如果你的目的是过滤线匹配VariableStore
,这么做:
with open("./Variables/TxtFile.txt", "r") as a_file:
lines = a_file.readlines()
with open("./Variables/TxtFile.txt", "w") as new_file:
for line in lines:
if line.strip("n") != VariableStore:
continue # Skip the VariableStore line
new_file.write(line) # Write other lines
使用with
语句时,不需要手动关闭文件。
您只需要在稍后解析完所有行后关闭该文件。此外,您需要编写不的行。火柴,不是那种火柴。请注意以下更改:
# Read file
a_file = open("./Variables/TxtFile.txt", "r")
lines = a_file.readlines()
a_file.close()
# Write file
new_file = open("./Variables/TxtFile.txt", "w")
for line in lines:
if line.strip("n") == VariableStore:
# Don't write this line
pass
else:
new_file.write(line)
new_file.close()
让我们假设您的文本文件TxtFile.txt
包含以下文本
Hello
World
I'm
Python
Developer
你有一个变量var
,它包含字符串World
,我们想从文本文件中删除。
这是一个python代码完成的工作,在几行
var='World' # a string to remove
with open("TxtFile.txt","r+") as f:
lines = f.readlines()
lines = [line for line in lines if line.strip()!=var]
f.seek(0)
f.writelines(lines)
f.truncate()
运行此代码后的文本文件。
Hello
I'm
Python
Developer
问题是您以写模式而不是追加模式打开文件。替换
new_file = open("./Variables/TxtFile.txt", "w")
new_file = open("./Variables/TxtFile.txt", "a")
,您将追加数据而不是覆盖它。
另外,通常建议使用'with'语句打开文件,因为它会自动为您关闭文件。
with open("./Variables/TxtFile.txt", "a") as text_file:
...