arcpy对图层文件的属性表实现查询、插入、更新、删除

前言

对属性表进行增删改查要用到插入游标、删除游标、更新游标、查询游标。

官方文档地址如下:https://resources.arcgis.com/zh-cn/help/main/10.2/

授人以鱼不如授人以渔!!

一、查询游标SearchCursor

  SearchCursor 函数用于在要素类或表上建立只读游标。SearchCursor 可用于遍历行对象并提取字段值。可以使用 where 子句或字段限制搜索,并对结果排序。

在这里插入图片描述

  前面第一个参数为必填参数,即需要查询的图层文件;{fields}一般也会用到,即想要查询的字段,若不填则默认包含所有字段。

1、示例一

属性表如图:
在这里插入图片描述

通过查询游标,查询 ['Id', 'BSM', 'WYBS'] 三个字段:

import arcpy

# 设置工作空间
arcpy.env.workspace = r"E:\arcpy_study\Arcpy编程开发(从小白到大神)\测试文件"

# 设置操作的图层文件
shapeFile = '测试shap1.shp'

# 设置要查询的字段名
fieldName = ['Id', 'BSM', 'WYBS']

# 获取游标对象并且迭代
with arcpy.da.SearchCursor(shapeFile, fieldName) as cursor:
    for row in cursor:
        print row[0], row[1], row[2]

结果:

1 1 wybs_0
2 2 wybs_1
3 3 wybs_2
4 4 wybs_3
5 5 wybs_4

2、示例二

属性表如图:
在这里插入图片描述

查询代码如下:

扫描二维码关注公众号,回复: 15513469 查看本文章
import arcpy

# 设置工作空间
arcpy.env.workspace = r"E:\arcpy_study\Arcpy编程开发(从小白到大神)\测试文件"

# 设置操作的图层文件
shapeFile = '测试shap1.shp'

cursor = arcpy.SearchCursor(shapeFile)
for row in cursor:
    print row.getValue('Id'), row.getValue('BSM'), row.getValue('WYBS')

结果如下:

1 1 wybs_0
2 2 wybs_1
3 3 wybs_2
4 4 wybs_3
5 5 wybs_4

3、示例三(联合where参数一起使用)

  我们可以添加一个where_clause参数一起使用,这个参数的值为一个字符串,相当于sql查询语句的where后面跟着的查询条件。

属性表如图:
在这里插入图片描述

查询代码如图:

import arcpy

# 设置工作空间
arcpy.env.workspace = r"E:\arcpy_study\Arcpy编程开发(从小白到大神)\测试文件"

# 设置操作的图层文件
shapeFile = '测试shap1.shp'

sql_exe = "\"WYBS\" = 'wybs_2'"
fieldName = ['Id', 'BSM', 'WYBS']
with arcpy.da.SearchCursor(shapeFile, fieldName, where_clause=sql_exe) as cursor:
    for row in cursor:
        print row[0], row[1], row[2]

结果:

3 3 wybs_2

可以看到,我们只查询到了WYBS = wybs_2 的记录。

二、更新游标UpdateCursor

  UpdateCursor 函数创建一个用于更新或删除指定要素类、shapefile 和表中的行的游标。该游标将数据锁定保留至脚本完成或更新游标对象被删除时。

  UpdateCursor可用于读写数据,即:既可以查询也可以更新!更新包含覆盖和删除!!

在这里插入图片描述

  前面第一个参数为必填参数,即需要更新的图层文件;{fields}一般也会用到,即想要更新的字段,若不填则默认包含所有字段。

1、查询示例一

  用UpdateCursor来查询数据和SearchCursor类似的,我这里只演示一种,另外的几种可以照着SearchCursor的自己写。代码如下:

import arcpy

# 覆盖更新一
def coverSearchOne(shapeFile):
    # 要更新的字段(建议用元组,这样就不能更改了,也不能重复)
    fieldNameList = ('Id', 'BSM', 'WYBS')

    with arcpy.da.UpdateCursor(shapeFile, fieldNameList) as cursor:
        for row in cursor:
            print row[0], row[1], row[2]



if __name__ == '__main__':
    # 设置工作空间
    arcpy.env.workspace = r"E:\arcpy_study\Arcpy编程开发(从小白到大神)\测试文件"

    # 设置操作的图层文件
    shapeFile = '测试shap1.shp'

    coverSearchOne(shapeFile=shapeFile)

结果如下:

1 1 wybs_0
2 2 wybs_1
3 3 wybs_2
4 4 wybs_3
5 5 wybs_4

2、更新示例一

原始数据:
在这里插入图片描述

更新代码:

def coverUpdateOne(shapeFile):
    # 要更新的字段(建议用元组,这样就不能更改了,也不能重复)
    fieldNameList = ('Id', 'BSM', 'WYBS')

    with arcpy.da.UpdateCursor(shapeFile, fieldNameList) as cursor:
        for row in cursor:
            if row[2] == 'wybs_2':
                row[2] = 'wybs100'
            # 更新这一行
            cursor.updateRow(row)

if __name__ == '__main__':
    # 设置工作空间
    arcpy.env.workspace = r"E:\arcpy_study\Arcpy编程开发(从小白到大神)\测试文件"

    # 设置操作的图层文件
    shapeFile = '测试shap1.shp'

    coverUpdateOne(shapeFile=shapeFile)

更新后的数据:
在这里插入图片描述

3、更新示例二

原始数据:
在这里插入图片描述

更新代码:

def coverUpdateTwo(shapeFile):
    # 要更新的字段(建议用元组,这样就不能更改了,也不能重复)
    fieldNameList = ('Id', 'BSM', 'WYBS')

    # 获取更新游标
    cursor = arcpy.UpdateCursor(shapeFile, fieldNameList)

    # 遍历每一行
    for row in cursor:
        if row.getValue('WYBS') == 'wybs100':
            row.setValue('WYBS', 'wybs_1000')
        cursor.updateRow(row)

if __name__ == '__main__':
    # 设置工作空间
    arcpy.env.workspace = r"E:\arcpy_study\Arcpy编程开发(从小白到大神)\测试文件"

    # 设置操作的图层文件
    shapeFile = '测试shap1.shp'

    coverUpdateTwo(shapeFile=shapeFile)

更新后的数据:
在这里插入图片描述

4、更新示例三(和where联合在一起)

  到这里,相信大家都明白, 更新实际上是将数据查询出来,接着判断数据是否满足更新条件,最后在更新。和where联合在一起的更新其实和where查询是一样的,这里就不过多演示了。

5、删除某一行示例一

原始数据:
在这里插入图片描述

删除代码:

def coverDeleteOne(shapeFile):
    # 要更新的字段(建议用元组,这样就不能更改了,也不能重复)
    fieldNameList = ('Id', 'BSM', 'WYBS')

    with arcpy.da.UpdateCursor(shapeFile, fieldNameList) as cursor:
        for row in cursor:
            if row[2] == 'wybs_1000':
                # 删除一行数据,注意deleteRow不加任何参数
                cursor.deleteRow()

if __name__ == '__main__':
    # 设置工作空间
    arcpy.env.workspace = r"E:\arcpy_study\Arcpy编程开发(从小白到大神)\测试文件"

    # 设置操作的图层文件
    shapeFile = '测试shap1.shp'

    coverDeleteOne(shapeFile=shapeFile)

删除后的数据:
在这里插入图片描述

6、删除示例二

原始数据:
在这里插入图片描述

删除代码:

def coverDeleteTwo(shapeFile):
    # 要更新的字段(建议用元组,这样就不能更改了,也不能重复)
    fieldNameList = ('Id', 'BSM', 'WYBS')

    # 获取更新游标
    cursor = arcpy.UpdateCursor(shapeFile, fieldNameList)

    # 遍历每一行
    for row in cursor:
        if row.getValue('WYBS') == 'wybs_0':
            # 删除一行,这种方式需要加参数
            cursor.deleteRow(row)

if __name__ == '__main__':
    # 设置工作空间
    arcpy.env.workspace = r"E:\arcpy_study\Arcpy编程开发(从小白到大神)\测试文件"

    # 设置操作的图层文件
    shapeFile = '测试shap1.shp'

    coverDeleteTwo(shapeFile=shapeFile)

7、删除示例三(联合where参数一起用)

依葫芦画瓢自己照着上面写。

三、插入游标InsertCursor

  向要素类、shapefile 或表中插入行。InsertCursor 返回一个分发行对象的枚举对象。可使用 newRow 方法从插入行的枚举对象获取新的行对象。每次调用光标上 insertRow 都会在表中创建新行,该行的初始值设置为输入行中的值。

在这里插入图片描述

  前面第一个参数为必填参数,即需要更新的图层文件。

1、插入示例一

原始数据:
在这里插入图片描述

插入代码:

def coverInsertOne(shapeFile):
    # 要插入的字段
    fieldNameList = ('Id', 'BSM', 'WYBS')

    with arcpy.da.InsertCursor(shapeFile, fieldNameList) as cursor:
        for i in range(1, 10):
            # 插入一行
            cursor.insertRow((i, i, 'wybs_' + str(i)))
        # 删除游标对象和 row 对象解除对数据的锁定
        del cursor

if __name__ == '__main__':
    # 设置工作空间
    arcpy.env.workspace = r"E:\arcpy_study\Arcpy编程开发(从小白到大神)\测试文件"

    # 设置操作的图层文件
    shapeFile = '测试shap1.shp'

    coverInsertOne(shapeFile=shapeFile)

插入后的数据:
在这里插入图片描述

4、插入示例二

原始数据:
在这里插入图片描述

插入代码:

def coverInsertTwo(shapeFile):
    # 要插入的字段
    fieldNameList = ('Id', 'BSM', 'WYBS')

    cursor = arcpy.InsertCursor(shapeFile, fieldNameList)

    for i in range(10):
        row = cursor.newRow()
        row.setValue('Id', i)
        row.setValue('BSM', i)
        row.setValue('WYBS', 'wybs_' + str(i))
        cursor.insertRow(row)
    # 删除游标对象和 row 对象解除对数据的锁定
    del cursor

if __name__ == '__main__':
    # 设置工作空间
    arcpy.env.workspace = r"E:\arcpy_study\Arcpy编程开发(从小白到大神)\测试文件"

    # 设置操作的图层文件
    shapeFile = '测试shap1.shp'

    coverInsertTwo(shapeFile=shapeFile)

插入后的数据:
在这里插入图片描述

总结

这些内容,使用文档里面都用,我只不过是整理出来而已,授人以鱼不如授人以渔!!

猜你喜欢

转载自blog.csdn.net/qq_47188967/article/details/131432977
今日推荐