Python 基于行分割文件

Python 基于行分割文件,python,split,text-files,nosql,Python,Split,Text Files,Nosql,我有一个非常大的文本文件1.3TB。这个文件的前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", "

我有一个非常大的文本文件1.3TB。这个文件的前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完成处理需要两周时间


非常感谢您的建议。

1.3Tb内存填充到32Gb RAM中,使您在处理数据时需要交换的内存大小超过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()

我知道这个问题需要Python的回答,但是通过经典的Unix尾部跳过元数据,让Python代码专门用于处理数据可能会更干净。例如

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

-n开关指定从何处开始打印相对于结束的行数,但+将此行为更改为相对于文件的开始,即跳过8行

您将无法将1.3Tb的数据读入内存,因此readlines已被删除。您可以使用范围为8:nextfin的for_uuu跳过8行。这可能会帮助您加快提取速度。