如何在Python中使用搜索游标将字段的所有值追加到空列表中
我刚开始学习Python,想把YYYYMMDD字段里的所有值添加到一个空列表里。
我的代码是这样的:
Date_list = [ ]
rows = arcpy.da.SearchCursor(path + 'myfile.shp', ['YYYYMMDD'])
for r in rows:
Date_list.append(r.getValue("YYYYMMDD"))
但是当我运行它的时候,出现了这个错误:
Traceback (most recent call last):
File "C:\Users\owner\Documents\Project\work.py", line 102, in <module>
Date_list.append(rows.getValue("YYYYMMDD"))
AttributeError: 'da.SearchCursor' object has no attribute 'getValue'
还有什么其他方法可以把所有的日期值添加到我的空列表里呢?
3 个回答
0
“长方法”:
import arcpy
import os
Date_list = []
path = "C:\SomeFolder"
shp = arcpy.management.MakeFeatureLayer(os.path.join(path, "myfile.shp"))
with arcpy.da.SearchCursor(shp, "YYYYMMDD") as rows:
for row in rows:
Date_list.append(row[0])
“短方法”:
import arcpy
import os
path = "C:\SomeFolder"
shp = arcpy.management.MakeFeatureLayer(os.path.join(path, "myfile.shp"))
Date_list = [row[0] for row in arcpy.da.SearchCursor(shp, "YYYYMMDD")]
总是创建一个功能层,因为这样比直接从硬盘读取文件要快。
2
简单看一下ArcGIS的文档,可以发现使用游标(cursor)进行遍历时,会得到普通的Python元组(tuple)。在Python中,元组是没有getValue
这个方法的。
你可以试试这个:
for r in rows:
Date_list.append(r[0])
3
Esri在10.1版本中为arcpy引入了数据访问(da)模块(详细信息可以查看DevSummit 2012的论文)。正如M4rtini所说,这个模块提供了两种SearchCursor类(也就是一个是arcpy下的“经典”类型,另一个是在arcpy.da下的)。
- arcpy.SearchCursor:这个“经典”游标是通过行对象来工作的 - 行的值是通过setValue/getValue属性来访问的。
- arcpy.da.SearchCursor:arcpy.da游标使用列表和元组 - 行的值是通过索引来访问的。
因此,这个问题有两种可能的解决方案:
去掉da类:
Date_list = [ ] rows = arcpy.SearchCursor(path + 'myfile.shp', ['YYYYMMDD']) for r in rows: Date_list.append(r.getValue("YYYYMMDD"))
通过索引引用来访问行的值(正如Sergey所建议的):
Date_list = [ ] rows = arcpy.da.SearchCursor(path + 'myfile.shp', ['YYYYMMDD']) for r in rows: Date_list.append(r[0])