【发布时间】:2019-07-20 06:56:44
【问题描述】:
大文件是 1200 万行文本,例如:
81.70, 89.86, 717.985
81.74, 89.86, 717.995
81.78, 89.86, 718.004
81.82, 89.86, 718.014
81.86, 89.86, 718.024
81.90, 89.86, 718.034
这是纬度、经度和与最近海岸线的距离(分别)。
我的代码使用已知地点的坐标(例如:墨西哥城:“-99.1, 19.4)并逐行搜索大文件,以输出与该坐标最近的海岸线的距离。
我将每一行放入一个列表中,因为很多行都符合长/纬度标准。我后来平均了到海岸线的距离。
检索每个坐标大约需要 12 秒。我的整个脚本需要 14 分钟才能完成。
这是我一直在使用的:
long = -99.1
lat = 19.4
country_d2s = []
# outputs all list items with specified long and lat values
with open(r"C:\Users\jason\OneDrive\Desktop\s1186prXbF0O", 'r') as dist2sea:
for line in dist2sea:
if long in line and lat in line and line.startswith(long):
country_d2s.append(line)
我正在寻找一种方法来更快地搜索文件和/或重写文件以使其更易于使用。
【问题讨论】:
-
您的脚本只是无法工作,因为
line是一个字符串,而 lat & long 是浮点数。先转换为浮点数列表,然后进行测试。 -
您是否可以选择将文件拆分为具有有意义名称的较小文件?即,您可以有一个名为
81.70的文件,其中包含该纬度的所有坐标,或者可能有一个名为81的文件,其中包含所有81.*纬度。 -
@Jean-FrançoisFabre 我想这是他真实代码的简化版本。
-
要获得优化的解决方案,应该回答一些额外的问题:坐标看起来是有序的,是吗?坐标看起来以恒定频率(0.04)采样,是吗? lat 值的所有循环是否完全包含在文件中(或者需要某种插值)?顺便说一句,您的匹配标准不是很精确,例如它会匹配
-99.1, 89.86, 719.424,因为19.4是距离的子字符串。 -
文件中数据的顺序重要吗?你会用它做其他事情吗?
标签: python large-files writetofile