这篇文章讲述基于Python的处理空间数据的一些方法,后续会再补充。
目录
1. 游标
arcpy中游标在arcpy.da模中,共有3种游标。
1.1 SearchCoursor
## 使用语法
cursor = arcpy.da.SearchCursor(输入表,字段名称列表[, 查询条件,空间参考])
## 一些地理处理
XXXX
## 记得要删除游标的引用
del cursor
1.2 UpdateCursor
## 使用语法
cursor = arcpy.da.UpdateCursor(输入表,字段名称列表[, 查询条件,空间参考]) //创建游标对象
## 使用for遍历要素
for row in cursor:
cursor.updateRow(更新的内容列表)
cursor.deleteRow() //注意:deleteRow()方法没有参数
## 记得要删除row引用和游标引用
del row
del cursor
1.3 InsertCursor
## 使用语法:
cursor = arcpy.da.InsertCursor(输入表,字段名称列表) //创建游标对象
for row in cursor:
cursor.insertRow(插入的内容列表)
## 记得要删除引用
del row
del cursor
1.4 用with语句使用游标
搜索InsertCursor
和更新UpdateCursor
游标支持with语句。具体语法如下:
## SearchCursor的with语句使用方法:
with arcpy.da.SearchCurosr(输入要素/输入表,字段名称列表) as cursor:
执行语句XXX
## UpdateCursor的with语句使用方法:
with arcpy.da.UpdateCurosr(输入要素/输入表,字段名称列表) as cursor:
执行语句XXX
注意:使用with语句使用游标,
末尾不需要del cursor语句
,因为with语句能够自动保证数据库锁的关闭和释放。
1.5 查询条件参数
在上述语法中的询条件是用SQL语言写的。对于不同类别的要素采用的语法格式不一样:
- shapefile和filedatabase:要素类字段分隔符为双引号
""
;
'"字段名" = XXX'
- personaldatabase:要素字段分隔符为
[]
;
'[字段名] = XXX'
- ArcSDE中要素类
没有分隔符号
;
为了保证要素字段的SQL语句使用符号准确性,采用 arcpy.AddFieldDelimiters(要素名, 要素字段名称列表)
函数。
## 举个例子
fieldname = "City"
delimfield = arcpy.AddFieldDelimiters(fc, fieldname)
cursor = arcpy.da.SearchCursor(fc, ["Name"], delimfield + " = 'Nanjing'")
2. 处理表和字段名
主要涉及到的语法如下:
## 确定表名在指定的工作空间中是否有效,表名称中无效的字符将用 _ 代替。
arcpy.ValidateTableName(表名称,{工作空间})
## 确定字段在指定的工作空间中是否有效,字段名称中无效的字符将用 _ 代替。
arcpy.ValidateFieldName(字段名称, {工作空间})
## 在指定的工作空间内通过在输入的名称后面追加数字以创建一个具有唯一性的名称。
arcpy.CreateUniqueName(名称, {工作空间})
## 返回一个字符串,字符串包括数据库名称、所有者名称以及表名。
arcpy.parseTableName(要素, {工作空间})
## 返回一个字符串,字符串包括数据库名称、所有者名称、表名以及字段名。
arcpy.parseFieldName(字段, {工作空间})
3. 处理文本文件
3.1 文本打开方式
f = open(文件路径,打开方式)
3.2 根据索引获取文件内容
- 具体语法:
## 不输入索引值则默认输入文件中的所有内容,以单一的字符串返回;
## 带索引值则输入索引值前的所有内容,下次再使用f.read(索引值)时将认为前一次读取的位置索引为0。
f.read({索引})
- 举个例子:
有一个文本文档中内容为 ‘Geographic’字符串,第一次使用f.read(3)则输出为’Geo’,第二次使用f.read(5)则输出为’graph’;
若想第二次读取时仍旧从文本的第一个字符为索引0开始,则可以使用seek(索引值)
来设置读取起始位置。
## 再次读取,从文本第一个字符开始读:
seek(0) //重新设置读取文件的位置为0
f.read(5)
## 则输出结果为:"Geogr"
3.3 文件的其它用法
f.readline()
f.readlines()
f.write(待写入的内容)
f.writelines(待写入的内容)
## 还可以使用fileinput模块
import fileinput
fp = fileinput.input(文件路径) //创建一个fileinput对象
for line in fp: //使用for遍历对象中的每行内容
XXXX
–原创文章,转载必须注明出处–