删除文本文件中特定行的Python程序

新手上路,请多包涵

我有一个包含以下行的文本文件 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()

所以,我将这个文本文件的所有行保存在“行”中。

 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” 满足,那么我将打开这个文本文件进行写入,我将打印除第 6 行之外的所有行(这意味着第 6 行已从该文本文件中删除)。

不幸的是,我将此文本文件中的行显示为空白,这意味着没有行作为输出打印。

但是,我想要文本文件中的行如下所示。

 1
2
3
4
5
7

我该如何解决这个问题?

我想只使用 Python 编程来解决这个问题;因为这是一项重大工作的小任务。

原文由 Sreeraj 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 356
2 个回答

您的问题是 lines[5]始终 等于 line6 。您从未修改过 lines 中的第六行,因此 line6lines[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)

原文由 Christian Dean 发布,翻译遵循 CC BY-SA 3.0 许可协议

您的代码中的错误已经指出,但我建议您不要比较每一行的内容,而只是比较行号或使用 startswith 。否则你会做很多不必要的字符串比较,这可能代价高昂。

其他改进可能是使用 with 处理您的文件,只打开文件一次并允许一次删除多行。

 # 'r+' allows you to read and write to a file
with open("test.txt", "r+") as f:
    # First read the file line by line
    lines = f.readlines()

    # Go back at the start of the file
    f.seek(0)

    # Filter out and rewrite lines
    for line in lines:
        if not line.startswith('dy'):
            f.write(line)

    # Truncate the remaining of the file
    f.truncate()

原文由 Olivier Melançon 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题