使用Python将XY坐标写入CSV文件

时间:2014-01-07 05:40:23

标签: python csv arcgis

我是python编程的新手,我有一个相当简单的项目但是遇到了一些困难。我想(a)提取shapefile(多边形)顶点的XY坐标,以及(2)将所有坐标写入csv文件,其中第一列具有X坐标,第二列具有Y坐标。到目前为止我编写的代码将顶点坐标写入csv文件,但坐标的每个数字都放在不同的列中。

到目前为止,这是我的代码:

import arcpy, os, csv
from arcpy import env
workspace = "J:/Folder/"
arcpy.env.overwriteOutput = True
myPath = workspace
oFile = open(myPath + "xyCoord.csv", "w")
polygon = myPath + "Polygon2.shp" 
writer = csv.writer(oFile, delimiter = ',', dialect = 'excel', lineterminator = '\n')
writer.writerow(['X', 'Y'])

for row in arcpy.da.SearchCursor(polygon, ["OID@", "SHAPE@"]):
    print ("Feature {0}:".format(row[0]))
    partnum = 0 # Prints the current multipont's ID

    for part in row[1]:
        print ("Part {0}:".format(partnum)) # Prints the part number

        for vertex in part:
            print ("{0}, {1}".format(vertex.X, vertex.Y))
            writer.writerow(str(vertex.X) + str(vertex.Y))
        partnum += 1
        oFile.close()

2 个答案:

答案 0 :(得分:2)

writer.writerow(str(vertex.X) + str(vertex.Y))

writerow期望一个iterable,每个元素代表一个列条目。你给它一个字符串,所以它将它解释为一个可迭代的,每个字符是一个元素,因此是一列。

改为使用:

writer.writerow([vertex.X, vertex.Y])

此外,您正在for内部关闭文件,因此您可能会在文件关闭后尝试编写新行。

答案 1 :(得分:2)

您必须传递writerow一个列表,其中列表中的每个元素都是输出中的单独列:

writer.writerow([vertex.X, vertex.Y])