数百万ポイント(x、* y *、zなど)のテキストファイルがあります。辞書を初期化するために、 isliceで最初の数百万行を読み込もうとしています
from collections import defaultdict
from itertools import islice
def point_grid_id(x, y, minx, maxy, size):
"""give id (row,col)"""
col = int((x - minx) / size)
row = int((maxy - y) / size)
return row, col
def initialize_dict(filename, minx, maxy, size, chunk=1000000):
point_dict = defaultdict(list)
with open(filename, 'r') as datafile:
for line in islice(datafile, chunk):
point = line.rstrip().split(parse)
point_dict[point_grid_id(float(point[0]), float(point[1]), minx, maxy, size)].append(point)
return point_dict
ここで、minx、maxyはグリッドの原点(左上隅)であり、サイズはグリッドのサイズです。、float(point[0])
はポイントifloat(point[1])
のxとyです
IDは、point-iがドロップする場所です。
point_dict = initialize_dict(filename, minx, maxy, 2)
この辞書を使用して、残りのポイント(〜800万)を読み取り、IDがすでにキーとして存在するポイントを辞書に保存しようとしています。つまり、辞書に存在しないIDを持つポイントは、新しいテキストファイルに保存されます。それ以外の場合は、辞書に保存されます。
ファイルの終わりまで100万ポイントごとにスライスするスタイルを見つけようとしています(不明)
size = 2
with open(filename, 'r') as datafile:
for line in islice(datafile, 1000000, 2000000):
point = line.rstrip().split(parse)
if point_grid_id(float(point[0]), float(point[1]), minx, maxy, size) in point_dict:
point_dict[point_grid_id(float(point[0]), float(point[1]), minx, maxy, size)].append(point)
else:
pass
このフォームを使用して、私は常に最初の10ポイントを取得します
with open(filename, 'r') as datafile:
for line in islice(datafile, 10):
point = line.rstrip().split(";")
print point