我有一个文本文件Thailand_Rectangle2_National Parks.txt,其中包含以下行。
1
2
3
4
5
dy 0.5965
7
现在,我想删除此文本文件中的第6行。
为此,我使用以下python代码。
f = open("C:/Users/Sreeraj/Desktop/Thailand_Rectangle2_National Parks.txt","r")
lines = f.readlines()
所以,我在'lines'中保存了这个文本文件的所有行。
line6 = lines[5]
t = line6[:2]
f.close()
所以,现在,我't'=“dy”。现在,
if t == "dy":
f = open("C:/Users/Sreeraj/Desktop/Thailand_Rectangle2_National Parks.txt","w")
for line in lines:
if lines[5] != line6:
f.write(line)
f.close()
所以,如果条件't'=“dy”满足,那么我将打开这个文本文件进行写入,我将打印除line6之外的所有行(这意味着从该文本文件中删除了line6)。
不幸的是,我将此文本文件中的行显示为空白,这意味着不会将任何行打印为输出。
但是,我希望文本文件中的行如下所示。
1
2
3
4
5
7
我该如何解决这个问题?
我想只使用Python编程来解决这个问题;因为这是一项重要工作的小任务。
答案 0 :(得分:3)
您的问题是lines[5]
始终等于line6
。您从未修改lines
中的第六行,因此line6
和lines[5]
仍然相等。因此,条件lines[5] != line6
将始终失败。
如果您想要始终从文件中删除第六行,则可以使用enumerate
。例如:
with open("file.txt", "r") as infile:
lines = infile.readlines()
with open("file.txt", "w") as outfile:
for pos, line in enumerate(lines):
if pos != 5:
outfile.write(line)
答案 1 :(得分:2)
您应该检查您的逻辑和变量名称。您每次在循环中检查行[5]是否不等于line6。它是什么,因为它是确切的线。您想要检查当前行:
if t == "dy":
f = open("C:/Users/Sreeraj/Desktop/Thailand_Rectangle2_National Parks.txt","w")
for line in lines:
if line != line6: # <- Check actual line!
f.write(line)
f.close()
答案 2 :(得分:2)
您已经指出了执行此操作的实际错误,但我建议您只需比较行号或使用startswith
,而不是比较每行的内容。否则你会进行大量不必要的字符串比较,这可能会很昂贵。
其他改进可能是使用with
处理您的文件,只打开一次文件并允许一次删除多行。
# 'r+' allows you to read and write to a file
with open("C:/Users/Sreeraj/Desktop/Thailand_Rectangle2_National Parks.txt","r+") as f:
for line in f.readlines():
if not line.startwith('dy'):
f.write(line)
# Truncate the remaining of the file
f.truncate()
答案 3 :(得分:0)
你知道line6 == lines [5],所以条件 如果行[5]!=第6行: 永远不会是真的,因此你永远不会写任何文件