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

时间:2014-07-24 06:03:15

标签: python file tab-delimited-text

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

我想删除第n行制表符分隔的txt。

我会指定像

n = 1

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

如果程序在没有读取整个输入文件的情况下完成,那就太棒了。

我试图从之前的一个问题中学习:

Concatenate tab-delimited txt files vertically

这个问题是垂直连接两个制表符分隔的txt文件。所以我认为逆转这个过程会为我做类似的事情。但是我找不到怎么做。

我还尝试了很多其他stackoverflow答案。

但他们主要是“删除具有特定短语的行”,而不是“删除第n行”

How to delete a line from a text file using the line number in pythonDeleting a specific line in a file (python)Deleting a line from a file in Python

2 个答案:

答案 0 :(得分: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]删除第7行,因为索引从零开始。所以,这是我们可以使用的一个方便的功能:

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

答案 1 :(得分: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