如何在python中将数据结果写入输出文件

时间:2016-09-05 18:54:39

标签: python geolocation coordinates pycharm data-analysis

我已编写此代码来分析和搜索地理坐标以获取数据点的接近度。由于我有这么多的数据点,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

我认为我的问题是我不明白我应该如何以有意义的格式编写,保存和整理文件到我的电脑中。所以,如果有人有任何意见或建议,我将非常感谢您的支持!

1 个答案:

答案 0 :(得分:0)

我的建议:将您的代码写入文件并将其包装在上下文管理器中。例如。 https://jeffknupp.com/blog/2016/03/07/python-with-context-managers/