基于行拆分文件

时间:2017-05-16 17:35:07

标签: python split text-files nosql

我有一个非常大的文本文件(1.3太字节)。该文件的前8行是元信息。我想删除这些行,然后将其余文件导入NoSQL数据库。

我正在使用这个Python代码:

fin = open( 'hugefile.vcf', "r" )
data_list = fin.readlines()
fin.close()
#remove lines
del data_list[0:7+1]
#write the changed data (list) to a file
fout = open("subset.vc", "w")
fout.writelines(data_list)
fout.close()

但代码太慢了。使用32 Gb RAM完成处理需要两周时间。

非常感谢您的建议。

2 个答案:

答案 0 :(得分:1)

填充到32Gb RAM中的1.3Tb为您提供了超过40倍的内存大小,需要在处理数据时进行交换,以满足机器的其他内存需求。 jonrsharpe给了你一个要点:用一个简单的循环跳过8行,然后单独处理剩余的行。像这样:

fout = open("subset.vc", "w")
with open( 'hugefile.vcf', "r" ) as fin:
    # Ignore header lines
    for _ in range(8):
        next(fin)

    # Transfer data to output file
    for line in fin:
        fout.writeline(line)

fout.close()

答案 1 :(得分:0)

我知道问题是要求Python回答,但是通过传统的Unix tail来跳过元数据并将Python代码专门用于处理数据可能更为清晰。 E.g。

tail -n +8 hugefile.vcf | python code.py

-n开关指定从相对于结尾的行数开始打印的位置,但+将此行为更改为相对于文件的开头,即跳过8行。