最有效地删除制表符分隔文本的第n行

1 投票
2 回答
1247 浏览
提问于 2025-04-18 14:34

我有一个用制表符分隔的文本文件。

我想要删除这个文本文件中的第 n 行。

我会像这样设置:

n = 1

然后程序就会只删除文件的第一行。

如果程序能在不读取整个输入文件的情况下做到这一点,那就太棒了。

我试着从我之前的问题中学习:

垂直合并制表符分隔的文本文件

这个问题是将两个制表符分隔的文本文件垂直合并。所以我想反过来做这个过程,可能会对我有帮助。但我找不到怎么做。

我还尝试了很多其他的StackOverflow回答。

但是它们大多数都是“删除包含特定短语的行”,而不是“删除第 n 行”。

(如何通过行号删除文本文件中的一行(Python), 删除文件中的特定行(Python), 在Python中从文件中删除一行)

2 个回答

1
lineToRemove = 7

f = open("yourfile.txt","r")
lines = f.readlines()
f.close()

f = open("yourfile.txt","w")
linesInFile = 0
for line in lines:
    linesInFile = linesInFile + 1
    if linesInFile != lineToRemove:
        f.write(line)
f.close()

编辑:通过使用 del 并省略显式的 openclose,我们可以简化代码:

lines = file("yourfile.txt", "r").readlines()
del lines[6]
file("yourfile.txt", "w").writelines(lines)

请注意,del lines[6] 会删除第七行,因为索引是从零开始的。所以,这里有一个我们可以使用的方便函数:

def deleteLine(filename, lineToRemove):
    lines = file(filename, "r").readlines()
    del lines[lineToRemove-1]
    file(filename, "w").writelines(lines)
1

你可以使用 itertools.islice 来实现这个功能。在这里,不需要用到Python的for循环,所以它的速度会比较快:

from itertools import islice

n = 4
with open('file.txt') as f, open('out.txt', 'w') as out:
    out.writelines(islice(f, n-1)) #write the lines before the nth line
    out.writelines(islice(f, 1, None)) #write the rest of the lines except nth

撰写回答