【发布时间】:2013-02-07 18:11:30
【问题描述】:
我有一个包含大约 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]
上面的代码实现了我想要的,但是非常慢。它可以在几分钟内处理前一百个左右的时间间隔,但随着每个时间间隔的过去,它会以指数方式变慢,因此需要几天时间才能运行。有没有更快或更有效的方法来做到这一点?我认为问题在于它必须扫描整个文件以在每次循环中找到指定间隔内的位置。
【问题讨论】:
-
是按位置信息排序的 CSV 文件(即第 1 列)?
-
顺便说一句,你不应该使用
id作为变量,因为这会覆盖Python的内置id函数。 -
是的...按位置排序
标签: python split large-files csv