免费视频|新人指南|投诉删帖|广告合作|地信网APP下载

查看: 17057|回复: 24
收起左侧

[二次开发] arcpy操作字段,批量添加、删除字段,按字段属性分割

    [复制链接]

7

主题

3733

铜板

4

好友

VIP会员

Rank: 23Rank: 23Rank: 23Rank: 23Rank: 23Rank: 23Rank: 23

积分
264
发表于 2018-6-24 08:39 | 显示全部楼层 |阅读模式
本帖最后由 975601416 于 2018-6-24 08:49 编辑

一、arcpy操作字段1、删除字段函数:arcpy.DeleteField_management
语法:DeleteField_management (in_table,drop_field)
  
参数
  
  
说明
  
  
数据类型
  
  
in_table
  
  
包含要删除字段的表。将修改现有输入表。
  
  
Mosaic  Layer; Raster Layer; Table View
  
  
drop_field
  
[drop_field,...]
  
  
要从输入表中删除的字段。必填字段不能删除。
  
  
Field
  
例:
要删除“省级行政区域.shp”的AREA、PERIMETER两个字段。
>>>arcpy.DeleteField_management("C:/Users/yang/Desktop/中国行政区矢量图/省级行政区域.shp",'AREAERIMETER')
①对于已加载的图层(比如本例)第1参可以直接使用图层名“省级行政区域”;
②要删除多个字段,第2参用‘字段名1;字段名2;…’
Ps: string类型外包是“双引号”,还是‘单引号’都可以,python都认!


2、增加字段
函数:arcpy.AddField_management
语法:AddFields_management (in_table,field_description)
  
参数
  
  
说明
  
  
数据类型
  
  
in_table
  
  
要添加指定字段的输入表。该字段将被添加到现有输入表,并且不会创建新的输出表。
  
可将字段添加到  ArcSDE 的要素类、文件或个人地理数据库的要素类、coverageshapefile、栅格目录、独立表、带属性表的栅格和/或图层。
  
  
Mosaic Layer;
  
Raster Catalog Layer;
  
Raster Layer;
  
Table View
  
  
field_name
  
  
要添加到输入表的字段的名称。
  
  
String
  
  
field_type
  
  
在创建新字段时所使用的字段类型。
  
·         TEXT —名称或其他文本特性。
  
·         FLOAT —特定范围内含小数值的数值。
  
·         DOUBLE —特定范围内含小数值的数值。
  
·         SHORT —特定范围内不含小数值的数值;编码值。
  
·         LONG —特定范围内不含小数值的数值。
  
·         DATE —日期和/或时间。
  
·         BLOB —影像或其他多媒体。
  
·         RASTER —栅格影像。
  
·         GUID —GUID
  
  
String
  
  
field_precision
  
(可选)
  
  
描述可存储在字段中的位数。所有位都将被计算在内,而无论其处于小数点的哪一侧。
  
如果输入表是个人或文件地理数据库,则将忽略字段精度值。
  
  
Long
  
  
field_scale
  
(可选)
  
  
设置可存储在字段中的小数位数。此参数仅可用于浮点型和双精度数据字段类型。
  
如果输入表是个人或文件地理数据库,则将忽略字段小数位数值。
  
  
Long
  
  
field_length
  
(可选)
  
  
要添加的字段的长度。它为字段的每条记录设置最大允许字符数。此选项仅适用于文本或  blob 类型的字段。
  
  
Long
  
  
field_alias
  
(可选)
  
  
指定给字段名称的备用名称。此名称用于为含义隐晦的的字段名称指定更具描述性的名称。字段别名参数仅适用于地理数据库和  coverage
  
  
String
  
  
field_is_nullable
  
(可选)
  
  
不存在关联属性信息的地理要素。它们与零或空字段不同,仅支持地理数据库中的字段。
  
·         NON_NULLABLE —字段不允许空值。
  
·         NULLABLE —字段允许空值。这是默认设置。
  
  
Boolean
  
  
field_is_required
  
(可选)
  
  
指定要创建的字段是否是表的必填字段;仅支持地理数据库中的字段。
  
·         NON_REQUIRED —字段不是必填字段。这是默认设置。
  
·         REQUIRED —此字段是必填字段。必填字段具有永久性,不能删除。
  
  
Boolean
  
  
field_domain
  
(可选)
  
  
用于约束地理数据库中的表、要素类或子类型的任何特定属性的允许值。必须指定现有属性域的名称才能将其应用于字段。
  
  
String
  

例:
要对“省级行政区域”增加一个名为“Area”,类型是“Text”,长度是100的字段。
>>>arcpy.AddField_management("省级行政区域",'Area',"TEXT",field_length=100)
①第1参“输入表”与第2参“字段名”是必选参数;
②其他参数为字段描述,可选,最好使用具名参数,如field_length=100。


3、字段列表函数:arcpy.ListFields
语法:ListFields (dataset, {wild_card},{field_type})
  
参数
  
  
说明
  
  
数据类型
  
  
dataset
  
  
指定的要素类或表(其字段将被返回)。
  
  
String
  
  
wild_card
  
  
wild_card 可限制返回的结果。如果未指定任何  wild_card,则会返回所有值。
  
(默认值为 None)
  
  
String
  
  
field_type
  
  
要返回的指定字段类型。有效字段类型为:
  
  • All — 返回所有字段类型。这是默认设置。
  • BLOB —仅返回 BLOB 字段类型。
  • Date —仅返回日期字段类型。
  • Double —仅返回双精度字段类型。
  • Geometry —仅返回几何字段类型。
  • GlobalID —仅返回 GlobalID 字段类型。
  • GUID —仅返回 GUID 字段类型。
  • Integer —仅返回整型字段类型。
  • OID —仅返回 OID 字段类型。
  • Raster —仅返回栅格字段类型。
  • Single —仅返回单精度字段类型。
  • SmallInteger —仅返回短整型字段类型。
  • String —仅返回字符串字段类型。
  
(默认值为 All)
  
  
String
  

例:打印出“省级行政区域”的所有字段名
>>> fieldList=arcpy.ListFields("省级行政区域")
>>> for field infieldList:
...     print field.name
① arcpy.ListFields返回字段对象列表;
②本例只循环打印出字段的name属性。


4、批量删除字段例:批量删除“省级行政区域”除“FID”、“Shape”、“Area”之外的字段
>>> fieldList=arcpy.ListFields("省级行政区域")
... for field infieldList:
...     if field.name!='FID' and field.name!='Shape' and field.name!='Area':
...         arcpy.DeleteField_management("省级行政区域",field.name)
①用到arcpy.ListFields与arcpy.DeleteField_management两个函数;
②用if语句判断字段名,不是要保留的就删除。


5、批量添加字段例:给“省级行政区域”添加“A、B、C、D”4个字段。
①用Excel制作出字段及其描述表;

3.png
②复制除标题行以为的内容,粘贴到txt文档,替换空格为“,”(英文符号,);


③arcpy批量添加字段,导入“Fields Description.txt”描述,每一行line是1个字段信息,故将每行信息用“,”拆分装入列表lineList;新建字段各属性描述使用“具名参数=列表各索引值指示数据”的方式传入;
>>> f=open("C:/Users/yang/Desktop/FieldsDescription.txt",'r')
... line=f.readline()
... while line:
...     lineList=line.split(',')
...     arcpy.AddField_management("省级行政区域",field_name=lineList[0],field_type=lineList[1],field_length=lineList[2],field_precision=lineList[3],field_scale=lineList[4].replace("\n",""))
...     line=f.readline()
... f.close()
④使用该脚本时只需要改动“Fields Description.txt”描述文件路径与待处理的要素名即可。

6、根据字段拆分(批量分析工具-筛选功能)
>>> # in_feather:待拆分要素类
... # out_folderpath:输出路径,注意最后加“/”以与字段名拼接出输出文件路径
... # split_field:拆分标准字段
... import arcpy
... in_feather="C:/Users/yang/Desktop/中国行政区矢量图/省级行政区域.shp"
... out_folderpath="C:/Users/yang/Desktop/1/"
... split_field="NAME"
... field_data_list=[]
... with arcpy.da.SearchCursor(in_feather,split_field) as cursor:
...     for row in cursor:
...         if row[0] not in field_data_list:
...             field_data_list.append(row[0])
... forselect_data infield_data_list:
...     arcpy.Select_analysis(in_feather,out_folderpath+select_data+'.shp',split_field+"="+"'"+select_data+"'")

①该脚本实现把“省级行政区域”按“NAME”拆分成多个图层;
②该脚本只需要在变量声明时修改注释中写明的3个参数。


函数:arcpy.Select_analysis
语法:Select_analysis (in_features,out_feature_class, {where_clause})
  
参数
  
  
说明
  
  
数据类型
  
  
in_features
  
  
从中选择要素的输入要素类或图层。
  
  
Feature  Layer
  
  
out_feature_class
  
  
要创建的输出要素类。如果不使用任何表达式,则其中将包含所有输入要素。
  
  
Feature  Class
  
  
where_clause
  
(可选)
  
  
用于选择要素子集的 SQL  表达式。有关 SQL 语法的详细信息,请参阅帮助主题 在查询表达式中使用的元素的 SQL 参考
  
  
SQL  Expression
  

Ps:ArcGis10.5以上版本有函数:SplitByAttributes_analysis (Input_Table, Target_Workspace,Split_Fields)


评分

参与人数 1铜板 +55 收起 理由
b176877840 + 55 好贴好报!

查看全部评分

1

主题

3435

铜板

10

好友

助理工程师

Rank: 5Rank: 5

积分
252
QQ
发表于 2020-11-25 11:17 | 显示全部楼层
挺好的,谢谢分享。
回复 支持 反对

使用道具 举报

0

主题

520

铜板

2

好友

助理工程师

Rank: 5Rank: 5

积分
152
发表于 2021-4-7 09:13 | 显示全部楼层
好东西,学习一下。
回复 支持 反对

使用道具 举报

47

主题

2万

铜板

20

好友

资深会员

Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

积分
3600
发表于 2021-6-1 21:05 | 显示全部楼层
谢谢分享
回复

使用道具 举报

0

主题

238

铜板

1

好友

实习生

Rank: 1

积分
3
发表于 2021-9-24 16:27 | 显示全部楼层
你好,我想请教下,我用最后一个代码,with arcpy.da.SearchCursor(in_feather,split_field) as cursor:这句报错是啥情况
回复 支持 反对

使用道具 举报

2

主题

671

铜板

0

好友

助理工程师

Rank: 5Rank: 5

积分
249
发表于 2021-9-28 22:17 | 显示全部楼层
u死亡iu吧i五i就iw
回复 支持 反对

使用道具 举报

1

主题

2738

铜板

5

好友

助理工程师

Rank: 5Rank: 5

积分
221
发表于 2021-12-21 11:56 | 显示全部楼层

好东西,学习一下。
回复 支持 反对

使用道具 举报

30

主题

2万

铜板

59

好友

钻石会员

Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26

积分
6290
QQ
发表于 2022-1-19 13:49 | 显示全部楼层
感谢分享!
回复

使用道具 举报

0

主题

1684

铜板

1

好友

高级工程师

Rank: 9Rank: 9Rank: 9

积分
643
发表于 2022-2-15 13:25 | 显示全部楼层
感谢分享
回复

使用道具 举报

15

主题

1万

铜板

2

好友

钻石会员

Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26

积分
14500
发表于 2022-2-19 13:30 手机频道 | 显示全部楼层
谢谢分享。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

在线客服
快速回复 返回顶部 返回列表