添加附件 (Data Management)
摘要
向地理数据库要素类或表的记录中添加文件附件。附件以单独附件表的形式存储在地理数据库中,该表与目标数据集保持连接。使用匹配表将附件添加到目标数据集中,该表指定了针对每个输入记录(或记录的属性组)向该记录中添加的附件文件的路径。
插图
用法
在可以使用该工具添加附件之前,必须先使用启用附件工具启用附件。
使用该工具添加的附件将被复制到地理数据库中。原始附件文件将不会受到任何影响。如果修改了原始文件,这些更改不会自动更新到地理数据库附件中;要将这些更改同步到地理数据库中,请使用移除附件工具移除受影响的附件,然后将修改的文件作为新附件重新添加。
如果输入数据集已经包含指向要添加附件的路径的字段,而且不希望使用单独的匹配表,请为输入数据集和匹配表指定相同数据集。工具将自动选择这两个连接字段的对象 ID 字段,而且您可以指定输入的哪个字段包含附件文件的路径。
-
多个文件可作为一个要素类或表记录的附件。要实现这一功能,匹配表应包含该输入 ID 的多个记录(例如,记录 1 的 InputID 为 1 且路径名为 pic1a.jpg,记录 2 的 InputID 为 1 且路径名为 pic1b.jpg)。
语法
参数 | 说明 | 数据类型 |
in_dataset |
要添加附件的地理数据库表或要素类。附件不直接添加到该表中,而是添加到关联的附件表,该附件表保持与输入数据集的连接。 输入数据集必须存储在 10.0 或更高版本的地理数据库中,而且表的附件必须已经启用。 | Table View |
in_join_field |
输入数据集中值与匹配连接字段中的值相匹配的字段。输入数据集和匹配表之间的连接字段值匹配的记录将添加附件。该字段可以是“对象 ID”字段或其他任何标识属性。 | Field |
in_match_table |
用于确定将为哪些输入记录添加附件并确定附件路径的表文件。 | Table View |
in_match_join_field |
匹配表中的字段,指示输入数据集中的哪些记录将添加指定附件。该字段的值可与输入数据集“对象 ID”或某些其他标识属性相匹配。 | Field |
in_match_path_field |
匹配表中的字段,包含要添加到输入数据集记录中的附件的路径。 | Field |
in_working_folder (可选) |
集中存放附件文件的文件夹或工作空间。通过指定工作文件夹,匹配路径字段中的路径可以是相对于工作文件夹的短文件名称。 例如,如果加载路径为 C:\MyPictures\image1.jpg 和 C:\MyPictures\image2.jpg 的附件,将工作文件夹设置为 C:\MyPictures 后,匹配路径字段中的路径就可以使用 image1.jpg 和 image2.jpg 等短名称,而不必使用较长的完整路径。 | Folder |
代码实例
以下代码片段说明了如何在 Python 窗口中使用 AddAttachments 工具。
import arcpy
arcpy.AddAttachments_management(r"C:\Data\City.gdb\Parcels", "ParcelID", r"C:\Data\matchtable.csv", "ParcelID","Picture" , r"C:\Pictures")
以下脚本说明了如何在独立脚本中使用 AddAttachments 工具。
"""
Example: we have a folder of digital photographs of vacant homes; the photos
are named according to the ParcelID of the house in the picture. Let's add
these photos to a parcel feature class as attachments.
"""
import csv
import arcpy
import os
import sys
input = r"C:\Data\City.gdb\Parcels"
inputField = "ParcelID"
matchTable = r"C:\Data\matchtable.csv"
matchField = "ParcelID"
pathField = "Picture"
picFolder = r"C:\Pictures"
try:
# create a new Match Table csv file
writer = csv.writer(open(matchTable, "wb"), delimiter=",")
# write a header row (the table will have two columns: ParcelID and Picture)
writer.writerow([matchField, pathField])
# iterate through each picture in the directory and write a row to the table
for file in os.listdir(picFolder):
if str(file).find(".jpg") > -1:
writer.writerow([str(file).replace(".jpg", ""), file])
del writer
# the input feature class must first be GDB attachments enabled
arcpy.EnableAttachments_management(input)
# use the match table with the Add Attachments tool
arcpy.AddAttachments_management(input, inputField, matchTable, matchField, pathField, picFolder)
except:
print arcpy.GetMessages(2)