約 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]
上記のコードは私が望むものを達成しますが、非常に遅いです。最初の 100 程度の間隔は数分で処理できますが、間隔が経過するたびに指数関数的に遅くなるため、実行には数日かかります。これを行うためのより高速またはより効率的な方法はありますか? 問題は、ファイル全体をスキャンして、ループのたびに指定された間隔内の位置を見つける必要があることだと思います。