从许多文本文件中快速删除前n行

时间:2010-08-19 12:38:44

标签: python file-io sed performance

我需要通过删除输入文件的前两行来创建输出文本文件。

目前我正在使用 sed“1,2d”input.txt> output.txt的

我需要为成千上万的文件执行此操作,因此使用python:

import os
for filename in somelist:
  os.system('sed "1,2d" %s-in.txt > %s-out.txt'%(filename,filename))

但这很慢。

我需要保留原始文件,因此我无法进行到位。

有没有办法更快地完成这项工作?使用除sed以外的东西?也许使用一些其他脚本语言而不是python?是否值得编写一个简短的C程序,或者文件写入磁盘访问是否可能成为瓶颈?

3 个答案:

答案 0 :(得分:9)

使用tail。怀疑任何事情都可能明显加快:

tail -n +3 input.txt > output.txt

将它包裹在您选择的循环中。但我真的怀疑sed慢一点 - 正如你所说,磁盘i / o通常是最终的瓶颈。

答案 1 :(得分:4)

我认为这比启动sed更快:

import os
import shutil

path = '/some/path/to/files/'
for filename in os.listdir(path):
    basename, ext = os.path.splitext(filename)
    fullname = os.path.join(path, filename)
    newname = os.path.join(path, basename + '-out' + ext)
    with open(fullname) as read:
        #skip first two lines
        for n in xrange(2):
            read.readline()
        # hand the rest to shutil.copyfileobj
        with open(newname, 'w') as write:
            shutil.copyfileobj(read, write)

答案 2 :(得分:3)

for file in *.ext
do
    sed -i.bak -n '3,$p' $file 
done

或只是

sed -i.bak -n '3,$p' *.ext