我有一个非常大的文本文件(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完成处理需要两周时间。
非常感谢您的建议。
答案 0 :(得分:1)
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行。