从python中的列表创建文本文件

时间:2014-10-13 09:13:23

标签: python-2.7 numpy

我有以下格式的列表IDXY坐标:

[[1.0, 300617.25483065785, 9761077.375684619],
 [1.0, 301117.25483065785, 9760577.375684619],
 [1.0, 301117.25483065785, 9760077.375684619],
 [1.0, 314117.25483065785, 9745577.375684619],
 [2.0, 297617.25483065785, 9745077.375684619],
 [2.0, 298117.25483065785, 9745077.375684619],
 [1.0, 314617.25483065785, 9745077.375684619],
 [1.0, 315117.25483065785, 9745077.375684619],
 [2.0, 298617.25483065785, 9744577.375684619],
 [2.0, 299117.25483065785, 9744577.375684619]]

现在我想以下列格式在文本文件中编写此列表:

1
X_Coordinate      Y_Coordinate
............      ............
X_Coordinate      Y_Coordinate
END

2
X_Coordinate       Y_Coordinate
............       ............
X_Coordinate       Y_coordinate    
END
END

我怎么能在python中实现它?我试过这样的:

new_arry = numpy.array(x)
textfile = os.path.join(path, 'test123.txt')
outFile = open(textfile, 'w')

for i in grid_code:
   new_list=numpy.where(new_arry[:,0]==i)
   mask_list=new_arry[new_list,:]

此处x是我的列表。现在我想将每个蒙版数组写入具有X和Y坐标的文件中。

1 个答案:

答案 0 :(得分:0)

您没有指定grid_code是什么,但更好的方法是找出使用numpy.unique(new_array[:,0])的所有ID,这将为您提供第一列中唯一值的列表。这将确保您不会尝试将浮点数与int进行比较。

最好在处理文件时使用with,因为这样您可以确保在完成后关闭它们,而不必记住.close()它们。

numpy.where声明中,其mask_list的书写方式为[ [ [], [], ..., [] ] ],即会有一组额外的括号。您可以通过定义mask_array = new_array[new_list[0],:]

来解决这个问题

由于您需要自定义格式,您可以使用循环来定义它。

with open(os.path.join(path, 'test123.txt'), 'w') as outFile:
    for i in numpy.unique(new_array[:,0]):
        new_list = numpy.where(new_array[:,0] == i)
        mask_list = new_array[new_list[0],:]
        outFile.write(str(i)+'\n')
        for line in mask_list:
            outFile.write('\t'.join((str(line[1]),str(line[2]))) + '\n')
        outFile.write('END\n')
    outFile.write('END\n')