我已编写此代码来分析和搜索地理坐标以获取数据点的接近度。由于我有这么多的数据点,PyCharm的输出变得过载,给了我一堆废话。从那时起,我一直试图通过将True / False结果写入计算机上的单独文档来尝试解决此问题。
此代码的要点是分析file1中坐标与file2中所有元素的接近程度。然后返回任何匹配的坐标匹配的匹配。正如你将在下面看到的,我写了一个嵌套for循环来做这个我理解可能是一种蛮力的策略,所以如果有人有一个更优雅的解决方案,我会很乐意了解更多。
import numpy as np
import math as ma
filename1 = "C:\Users\Justin\Desktop\file1.data"
data1 = np.genfromtxt(filename1,
skip_header=1,
usecols=(0, 1))
#dtype=[
#("x1", "f9"),
#("y1", "f9")])
#print "data1", data1
filename2 = "C:\Users\Justin\Desktop\file2.data"
data2 = np.genfromtxt(filename2,
skip_header=1,
usecols=(0, 1))
#dtype=[
#("x2", "f9"),
#("y2", "f9")])
#print "data2",data2
def d(a,b):
d = ma.acos(ma.sin(ma.radians(a[1]))*ma.sin(ma.radians(b[1]))
+ma.cos(ma.radians(a[1]))*ma.cos(ma.radians(b[1]))* (ma.cos(ma.radians((a[0]-b[0])))))
return d
results = open("results.txt", "w")
for coor1 in data1:
for coor2 in data2:
n=0
a = [coor1[0], coor1[1]]
b = [coor2[0], coor2[1]]
#print "a", a
#print "b", b
if d(a, b) < 0.07865: # if true what happens
results.write("\t".join([str(coor1), str(coor2), "True", str(d)]) + "\n")
else:
results.write("\t".join([str(coor1), str(coor2), "False", str(d)]) + "\n")
results.close()
这是我运行代码时收到的错误消息:
results.write("\t".join([str(coor1), str(coor2), "False", str(d)]) + "\n")
ValueError: I/O operation on closed file
我认为我的问题是我不明白我应该如何以有意义的格式编写,保存和整理文件到我的电脑中。所以,如果有人有任何意见或建议,我将非常感谢您的支持!
答案 0 :(得分:0)
我的建议:将您的代码写入文件并将其包装在上下文管理器中。例如。 https://jeffknupp.com/blog/2016/03/07/python-with-context-managers/