我有一个包含大约 140 万行和 50 列的大型制表符分隔文件。在我对文件中包含的数据做任何事情之前,我想把这个大文件分成大约几千个小文件。我的文件的第一列包含位置信息,我希望每个较小的文件都是基于此信息的特定间隔。在单独的列表中,我有要拆分较大文件的每个间隔的开始和停止。这是执行此操作的代码部分,开始和停止位置包含在名为 start_L 和 stop_L 的列表中:
for i in range(len(id)):
out1=((file%s.txt)%(id[i]))
table=open('largefile.tsv',"r")
start=int(start_L[i])
stop=int(stop_L[i])
table.next()
temp_out=open(out1,"w")
reader=csv.reader(table,delimiter="\t")
for line in reader:
if int(line[0]) in range(start,stop):
for y in line:
temp_out.write(("%s\t")%(y))
temp_out.write("\n")
else:
if int(line[0]) > stop:
break
else:
pass
print "temporary file..." , id[i]
上面的代码实现了我想要的,但是非常慢。它可以在几分钟内处理前一百个左右的时间间隔,但随着每个时间间隔的过去,它会以指数方式变慢,因此需要几天时间才能运行。有没有更快或更有效的方法来做到这一点?我认为问题在于它必须扫描整个文件以在每次循环中找到指定间隔内的位置。