我正在使用python模块https://gis.stackexchange.com/a/5943/16793来导出SDE数据库中的要素类列表。
import os, csv, arcpy, arcplus
>>> fcs = arcplus.listAllFeatureClasses("Database Connections\\Connection to oracle.sde\\BASINS.ACF")
输出是一个列表:
[u'BASINS.ACF_FL_SUB', u'BASINS.ACF_CHATTAHOOCHEE_BASIN', u'BASINS.ACF_CHIPOLA_BASIN', u'BASINS.ACF_CHIPOLA_AL']
为了将此列表传递给另一个函数,我在字典中为每个元素添加了一个字符串:
mylist = ['Database Connections\\Connection to oracle.sde\{0}'.format(i) for i in fcs]
看起来像:
print mylist[0]
Database Connections\Connection to oracle.sde\BASINS.ACF_FL_SUB
我想将此列表传递给另一个函数arcpy.ListFields(dataset),它将返回每个要素类的字段:
fn = [f.name for f in arcpy.ListFields(mylist [0])]
>>> print fn
[u'OBJECTID', u'HUC', u'BASIN', u'NAME', u'ACRES', u'SHAPE', u'SHAPE.AREA', u'SHAPE.LEN']
我正在试图弄清楚如何将fcs中的列表传递给函数arcpy.ListFields并将结果写入csv文件,但所需的循环结构确实给我带来了麻烦。我是这方面的新手,Python文档让我转过身来。任何指针都会有所帮助。
_________________________ ETC __________________________________________________
@Tony您的解决方案非常有效。虽然我尝试在较大的地理数据库上使用listAllFeatureClasses,但我没有足够的权限来读取某些属性,这会产生IOError:数据库连接\连接到oracle.sde \ LAND.LANDS \ LAND_POINTS不存在。我正在研究如何处理这个问题,并继续列表中的下一个要素类。也许尝试/继续?
答案 0 :(得分:1)
为列表中的每个项目调用arcpy.ListFields:
fns = [[f.name for f in arcpy.ListFields( list_entry )] for list_entry in mylist]
这将为您提供一个列表列表,其中fns [0]是条目mylist的函数[0]
可能更容易使用的是字典:
fns_dict = dict( [ (list_entry, [f.name for f in arcpy.ListFields( list_entry ) ] )
for list_entry in mylist ] )
使用示例中的数据:
fns_dict["BASINS.ACF_FL_SUB"] should be
[u'OBJECTID', u'HUC', u'BASIN', u'NAME', u'ACRES', u'SHAPE', u'SHAPE.AREA', u'SHAPE.LEN']