FieldMappings

摘要

FieldMappings 对象是 FieldMap 对象的集合。 将对象作为参数值用于执行字段映射的工具,例如合并工具。

说明

FieldMap 对象的属性包括输入文本值的起始位置和结束位置,因此可以使用一组输入值创建输出值。 如果 FieldMap 对象包含多个来自同一表或要素类的输入字段,则将使用 mergeRule 属性合并每个记录的值。 这是一种连接值的简便方法,例如在一个字段中保存的街道名称和在另一个字段中保存的街道类型,如 Eureka 和 Street。 当指定 Join 作为 mergeRule 值时,会使用 FieldMap 对象的 joinDelimiter 属性。 任何字符集(如空格)都可以用作分隔符。 在上方示例中,将会创建值 Eureka Street。

FieldMappings 对象是一组 FieldMap 对象,用作字段映射工具的参数值,例如合并。 要处理这些对象,最简单的方法就是先创建 FieldMappings 对象,然后通过添加要组合的输入要素类或表对 FieldMap 对象进行初始化。 提供了所有输入后,FieldMappings 对象将为所有输入中的每个唯一字段名提供一个 FieldMap 对象或输出字段。 您可以通过添加新字段、更改输出字段的属性或内容或删除不需要的输出字段来修改此列表。

语法

 FieldMappings ()

属性

属性说明数据类型
fieldCount
(只读)

输出字段的数目。

Integer
fieldMappings
(可读写)

组成 FieldMappings 对象的 FieldMap 对象列表。

FieldMap
fieldValidationWorkspace
(可读写)

定义属性字段命名规则的工作空间类型。确定输出字段名称时将使用这些规则,输出字段名称基于输入字段的名称。例如,将 fieldValidationWorkspace 属性设置为包含输入 shapefile 的磁盘上的文件夹路径时,会使输出字段名称截断为 10 个字符。将 fieldValidationWorkspace 属性设置为文件地理数据库路径时,可以使用更长的字段名称。设置 fieldValidationWorkspace 属性时,要注意输出格式。

String
fields
(只读)

Field 对象的列表。每个字段对象分别表示一个输出字段的属性。

Field

方法概述

方法说明
addFieldMap (field_map)

向字段映射中添加一个字段映射。

addTable (table_dataset)

将表添加到字段映射对象。

exportToString ()

将对象导出至其字符串表示。

findFieldMapIndex (field_map_name)

按名称查找字段映射内的字段映射。

getFieldMap (index)

按索引位置从 FieldMappings 对象返回 FieldMap 对象。

loadFromString (string)

通过已格式化字符串定义 FieldMappings 对象。

removeAll ()

移除所有值并创建一个空对象。

removeFieldMap (index)

FieldMappings 对象移除 FieldMap 对象。

replaceFieldMap (index, value)

FieldMappings 对象中替换 FieldMap 对象。

方法

addFieldMap (field_map)
参数说明数据类型
field_map

要添加到字段映射中的字段映射

FieldMap
addTable (table_dataset)
参数说明数据类型
table_dataset

要添加到字段映射对象中的表。

String
exportToString ()
返回值
数据类型说明
String

对象的字符串表示。

findFieldMapIndex (field_map_name)
参数说明数据类型
field_map_name

按名称查找字段映射。

String
返回值
数据类型说明
Integer

字段映射的索引位置。

getFieldMap (index)
参数说明数据类型
index

The index position of the FieldMap object.

Integer
返回值
数据类型说明
FieldMap

FieldMappings 对象中的 FieldMap 对象。

loadFromString (string)
参数说明数据类型
string

The string representation of the object.

In addition to FieldMappings and FieldMap methods and properties, you can also construct a FieldMappings object from a formatted string.

The following example shows the creation of a FieldMappings object that could be used with the Merge tool.

import arcpy

fieldmappings_string = 'REGION "Region" true true false 21 Text -1 -1,First,#,c:\\data\\fgdb.gdb\\north_america,REGION,-1,-1,c:\\data\\fgdb.gdb\\south_america,REGION2,-1,-1'

fieldmappings = arcpy.FieldMappings()
fieldmappings.loadFromString(fieldmappings_string)

The first nine values in the string define an output field and are space delimited.

  • The name of the output field.
  • The alias of the output field.
  • Whether the output field is editable (true or false).
  • Whether the output field supports nulls (true or false).
  • Whether the output field is required (true or false).
  • The length of the output field (text fields only).
  • The field type of the output field.
  • The precision of the output field (float and double fields only).
  • The scale of the output field (float and double fields only).

The remaining values define the field map characteristics and are comma delimited.

  • The field map merge rule.
  • The concatenator to join values.
  • The path to the input table.
  • The field name from the input table.
  • The start position of an input text value.
  • The end position of an input text value.

Any number of input fields can be mapped to the output field, not only two, as implied in the example. Include the merge rule and concatenator once, and include the dataset path, field name, and start position and end position for each input field.

Enclose any values with spaces, such as the field alias or concatenator, in quotation marks.

To skip a value, use a # for string values, and -1 for numeric values.

As shown in the following example, use a semicolon delimiter to separate multiple output fields.

import arcpy

fieldmappings_string = 'REGION "Region" true true false 21 Text -1 -1,First,#,c:\\data\\fgdb.gdb\\north_america,REGION,-1,-1,c:\\data\\fgdb.gdb\\south_america,REGION2,-1,-1;CAPITAL "Capital" true true false 21 Text -1 -1,First,#,c:\\data\\fgdb.gdb\\north_america,CAPITAL,-1,-1,c:\\data\\fgdb.gdb\\south_america,CAPITAL2,-1,-1'

fieldmappings = arcpy.FieldMappings()
fieldmappings.loadFromString(fieldmappings_string)
String
removeAll ()
removeFieldMap (index)
参数说明数据类型
index

The index position of the FieldMap.

Integer
replaceFieldMap (index, value)
参数说明数据类型
index

The index position of the FieldMap object to be replaced.

Integer
value

The replacement FieldMap object.

FieldMap

代码示例

FieldMappings 示例 1

要将相似数据集合并到一个无所不包的数据集中时,通常使用 FieldMap 对象。 在本例中,Trees 要素类和 Plants.shp shapefile 会合并至一个要素类:Vegetation。 两个原始要素类都具有两个属性:TypeDiameter。 两个属性都必须通过合并进行维护。

import arcpy

# Set the workspace
arcpy.env.workspace = 'c:/base'

in_features_1 = 'data.gdb/Trees'
in_features_2 = 'Plants.shp'
out_features = 'data.gdb/Vegetation'

# Create the required FieldMap and FieldMappings objects.
fm_type = arcpy.FieldMap()
fm_diam = arcpy.FieldMap()
fms = arcpy.FieldMappings()

# Get the field names of vegetation type and diameter for both
# original files.
tree_type = "Tree_Type"
plant_type = "Plant_Type"

tree_diam = "Tree_Diameter"
plant_diam = "Diameter"

# Add fields to their corresponding FieldMap objects.
fm_type.addInputField(in_features_1, tree_type)
fm_type.addInputField(in_features_2, plant_type)

fm_diam.addInputField(in_features_1, tree_diam)
fm_diam.addInputField(in_features_2, plant_diam)

# Set the output field properties for both FieldMap objects.
type_field = fm_type.outputField
type_field.name = 'Veg_Type'
fm_type.outputField = type_field

diam_field = fm_diam.outputField
diam_field.name = 'Veg_Diam'
fm_diam.outputField = diam_field

# Add the FieldMap objects to the FieldMappings object.
fms.addFieldMap(fm_type)
fms.addFieldMap(fm_diam)

# Merge the two feature classes.
arcpy.management.Merge([in_features_1, in_features_2], out_features, fms)
FieldMappings 示例 2

此示例演示了通过 ExportFeatures 工具使用 FieldMap 对象合并字段的操作。 在本示例中,要素类包含有关城市中每个十字路口的事故数量的信息。 每年的数据都保存在一个字段中。 用户希望在不更改现有表格的情况下找出每个十字路口的平均事故数量。

import arcpy

in_features = r'c:/base/data.gdb/AccidentData'
out_features = r'c:/base/data.gdb/AverageAccidents'

# Create the necessary FieldMap and FieldMappings objects.
fm = arcpy.FieldMap()
fm1 = arcpy.FieldMap()
fms = arcpy.FieldMappings()

# Each field with accident data begins with 'Yr'.
# The next step loops through each of the fields beginning with 'Yr',
# and adds them to the FieldMap object.
for field in arcpy.ListFields(in_features, 'Yr*'):
    fm.addInputField(in_features, field.name)

# Set the merge rule to find the mean value of all fields in the
# FieldMap object.
fm.mergeRule = 'Mean'

# Set the properties of the output field.
out_field = fm.outputField
out_field.name = 'AvgAccidents'
out_field.aliasName = 'AvgAccidents'
fm.outputField = out_field

# Add the intersection field to the second FieldMap object.
fm1.addInputField(in_features, "Intersection")

# Add both FieldMap objects to the FieldMappings object.
fms.addFieldMap(fm)
fms.addFieldMap(fm1)

# Create the output feature class using the FieldMappings object.
arcpy.conversion.ExportFeatures(in_features, out_features, field_mapping=fms)

相关主题