我有一个包含数百万个点的文本文件(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已经作为Keys存在的点存储在字典中。换句话说,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