2014-07-24 42 views
1

我有一个制表符分隔的txt文件。最有效地删除制表符分隔txt的第n行

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

我将指派喜欢

n = 1 

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

如果程序在没有读取整个输入文件的情况下执行,那么它会很棒。

我试图从我以前的一个问题来学习:

Concatenate tab-delimited txt files vertically

这个问题是垂直连接两个制表符分隔txt文件。所以我认为扭转这个过程会为我做一些类似的事情。但我无法找到如何去做。

我也试过很多其他的计算器答案。

但它们大多 '具有特定短语除去线' 而不是 '除去第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

+1

除非线长度都相同,除了读取要删除一个所有的线条和打印所有的人。 – tripleee

+1

可能重复[如何使用python中的行号从文本文件中删除行](http://stackoverflow.com/questions/17747522/how-to-delete-a-line-from-a-text- python) – tripleee

+0

@tripleee虽然这个问题的标题说使用行号删除,但这个问题实际上并不是。这个问题是明确地分配“短语='狗叫''和删除与该短语行。 – user3123767

回答

1

您可以使用itertools.islice这一点。这里循环不Python是涉及所以它应该是快:

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 
+0

最后一行不应该有'n'而不是'1'吗? – igor

+1

@igor不,当文件对象已经被分割到第(n-1)行时,它应该是'1'。现在我们需要从第二个索引(1)开始忽略第n行。 –

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) 
+0

谢谢!这工作完美。但是,该程序是否读取整个输入文件?输入文件的行具有相同的长度。换句话说,所有行都有相同数量的列。那么是否有可能不读取所有行并删除第n行? – user3123767

+0

这是如何有效的? –