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

news2024/9/24 17:12:30

前言

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

官方文档地址如下: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、示例二

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

查询代码如下:

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)

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

总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/696649.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

代码复现:基于竞争学习的灰狼优化算法Clb-GWO

代码复现:基于竞争学习的灰狼优化算法Clb-GWO,可用于算法对比 参考文献:Aala Kalananda V K R, Komanapalli V L N. A competitive learning-based Grey wolf Optimizer for engineering problems and its application to multi-layer perce…

MeterSphere(基于JMeter)常用断言汇总

JSONPath方式断言 {"success": true,"errCode": null,"errMessage": null,"statDate":"6月28日","data": [{"name": "人口","value": "1","unit": "万人…

数字孪生与 GIS 融合为环保领域带来新的变化

在当今日益关注环境保护和可持续发展的时代,数字孪生和 GIS 的融合为环境保护领域带来了巨大的变化。数字孪生是一种以 3D 模型为基础的仿真技术,能够对真实世界进行精确的建模和模拟,而 GIS 则是一种用于收集、管理、分析和可视化地理数据的…

【Uni-app 引入海康h5player并接入ws视频流】

uni-app 海康h5player接入ws视频流 内容简介 采用uni-app中的renderjs 引入海康H5 SDK 后端接入海康综合安防平台的开放API获取预览流 海康H5 SDK 下载地址 接入原因 因在移动端接入不管是hls flv rtsp rtmp流的播放稳定性和速度均很慢,特采用ws直连流来播放&#…

REVIT技巧|一面接一面,叠层墙就是这样堆出来的?

​Revit中有3种墙族:基本墙、幕墙和叠层墙。幕墙定义为由网格和嵌板组成的系统。 基本墙是由从外部到内部的材质层组成的墙。基本墙自底部到顶部的厚度都相同。 叠层墙由相互堆叠的基本墙组成,可以设计具有自底部到顶部厚度不同的墙。 今天&#xff0c…

1.4 MyBatis数据库逆向生成工具

步骤1: mybatis-generator工程 步骤2&#xff1a;修改generatorConfig.xml内容 1.通用mapper所在目录 2.数据库链接 3.对应生成的pojo所在包 4.对应生成的mapper所在目录 5.配置mapper对应的java映射 6.数据库表 具体内容&#xff1a;<!-- 通用mapper所在目录 --> &l…

记录两个不同的域名使用同一个微应用遇到的坑(micro-app)

由于公司的项目越来越多&#xff0c;很多的系统&#xff0c;也有很多相似的模块&#xff0c;为了解决重复造轮子&#xff0c;降低开发维护成本&#xff0c;故将这些抽出来单独作为微应用。经过调研&#xff0c;发现某东出品的micro-app比较吻合。使用过程省略。 在多个项目&am…

Grafana 配置告警 配置 dubbo windows_exporter 报告页面图 其他公共报告可参考相近

目录 安装部署 官网下载 配置中文 启动 访问 账户密码 界面效果 图表操作 新建添加仪表 添加 Prometheus 数据源 导入已有报告示例 下载 windows_exporter Grafana 的图表模板 node_exporter 中文版&#xff1a;windows_exporter for Prometheus Dashboard CN v2…

2023年全网最全接口自动化测试框架搭建,没有之一

一、原理及特点 参数放在XML文件中进行管理 用httpClient简单封装一个httpUtils工具类 测试用例管理使用了testNg管理&#xff0c;使用了TestNG参数化测试&#xff0c;通过xml文件来执行case。 测试报告这里用到第三方的包ReportNG 项目组织用Maven 二、准备 使用工具&am…

期货和现货白银的区别

白银期货和现货白银既有区别&#xff0c;也有联系&#xff0c;它们二者都是以银价跟跟踪对象的保证金交易品种&#xff0c;因此都具有一定的杠杆效应&#xff0c;都可以双向操作&#xff0c;但是它们在交易制度、时间、杠杆水平等诸多方面&#xff0c;都存在明显的区别。 投资者…

为什么你总学不会编程?到底差什么?

为什么你总学不会编程&#xff1f;到底差什么&#xff1f; 笔者看到太多太多的人花上钱、耗费一两年的时间都学不会编程&#xff0c;甚至一门C语言都反反复复学不完、学不会&#xff0c;游走在大门边缘&#xff0c;总是入不了门&#xff0c;到底是什么因为什么&#xff1f; 因…

020、数据库管理之数据导出工具(Dumpling)

Dumpling dumpling详解dumpling介绍dumpling架构与特点dumpling 适用场景dumpling的部署dumpling 所需权限dumpling 导出SQL文件dumpling 导出csv文件对导出数据进行筛选导出数据的格式导出数据的一致性dumpling 性能优化 实验导出TiDB 数据库中的单张表和单个库导出mysql数据库…

tomcat接入skywalking

tomcat接入skywalking 一、说明二、步骤2.1 准备java-agent包2.2 tomcat部署2.2.1 下载2.2.2 tomcat修改catalina.sh文件2.2.3 tomcat修改启动端口2.2.4 启动tomcat 三、验证四、问题排查4.1 tomcat的启动日志 一、说明 服务器中已经运行着skywalking&#xff0c;准备在同一台…

【Jmeter教程】_设置请求的参数

目录 一、Jmeter传参 二、区分参数格式 在做接口测试时&#xff0c;发送请求的参数有两种格式&#xff0c;一种是Parameters&#xff0c;一种是JSON 一、Jmeter传参 Jmeter 传Parameters格式的参数 Jmeter 传JSON格式的参数 二、区分参数格式 在不清楚参数到底是何种格式时…

使用Arthas查看JDK代理源码

【README】 本文总结自黑马程序员-设计模式&#xff0c;老师讲的非常棒&#xff1b; 【1】jdk代理案例 卖票接口 public interface SellTickets2 {void sell(); }火车站 public class TrainStation2 implements SellTickets2 {Overridepublic void sell() {System.out.prin…

Vulnhub: DarkHole:1靶机

kali&#xff1a;192.168.111.111 靶机&#xff1a;192.168.111.130 信息收集 端口扫描 nmap -A -sC -v -sV -T5 -p- --scripthttp-enum 192.168.111.130 访问目标web网站&#xff0c;注册用户 注册时尝试注册用户名为admin的用户&#xff0c;发现存在该用户 进入用户后台&…

孪生网络:图片相似度对比神器

本文来自公众号“AI大道理” ​ Siamese Network&#xff08;孪生网络&#xff09;很早就被发明了&#xff0c;它的作者是著名的卷积神经网络LeNet-5的作者LeCun。 最早用来从相似图片数据集上学习图片表示的网络结构就是siamese网络。 两幅图通过两个共享权重的CNN得到各自…

【Redis】Redis简介及安装部署

Redis简介及安装部署 1.关系数据库 VS 非关系型数据库1.1 关系型数据库1.2 非关系型数据库1.3 关系型数据库和非关系型数据库区别1.4 非关系型数据库产生背景1.5 关系型数据库与非关系型数据库总结 2.Redis简介2.1 Redis概述2.2 Redis的优点2.3 Redis使用场景2.4 关于Redis的高…

一步一步学OAK之一: Hello World(使用DepthAI Python API 显示彩色视频流)

作为编程世界的传统入门仪式&#xff0c;我们这里也以Hello World来命名我们的第一个项目&#xff0c;其实我们这个项目与Hello World没有半毛钱关系。 在这个程序中&#xff0c;我们使用DepthAI Python API来一步步实现显示OAK相机彩色视频流&#xff0c;并捕捉物体的功能 目…