我试图获取一个字段名称数组,将它们复制到一个新数组中,然后根据它们与原始数组中字段名称的相似性,将其他字段名称添加到新数组中。 这将让我以几种不同的方式在表中运行光标...第一个获取要显示的文本的字符长度,第二个获取文本,并将格式信息附加到开头和结尾文本。
" PointData"表格包含以下字段名称:PrimeKey','标签'' Field1',' Field2',' Field3', ' fb_Field1',' fp_Field1'格式化信息保存在fb_和fp_字段中。
fields = ['PrimeKey', 'Label', 'Field1', 'Field2', 'Field3']
table = "PointData"
AllFields = fields
for field in fields:
bfldnm = 'fb_' + field
pfldnm = 'fp_' + field
bfld = arcpy.ListFields(table, bfldnm)
pfld = arcpy.ListFields(table, pfldnm)
if bfld:
AllFields.append(bfld[0].name)
bfld = []
if pfld:
AllFields.append(pfld[0].name)
pfld = []
生成的字段数组在运行此for循环后最终会包含两个附加字段名称(' fb_Field1'和' fp_Field1')...我可以'弄清楚为什么......我只想将这两个值添加到AllFields数组中。
答案 0 :(得分:2)
@ njzk2已经提到了这一点,但我想我会添加一个解释这个理由的答案。 Python通过pass-by-object-reference完成所有工作。简而言之,这意味着当你完成任务时:
AllFields = fields
你实际上并没有制作副本。有几种方法可以在python中进行复制,最简单的方法是切片黑客:
AllFields = fields[:]
其他内容在python的copy文档中有详细介绍。例如:
import copy
AllFields = copy.copy(fields)
python传统上也使用snake case,因此AllFields
应为all_fields
答案 1 :(得分:0)
感谢njzk2
fields = ['PrimeKey', 'Label', 'Field1', 'Field2', 'Field3']
table = "PointData"
AllFields = fields[:]
for field in fields:
bfldnm = 'fb_' + field
pfldnm = 'fp_' + field
bfld = arcpy.ListFields(table, bfldnm)
pfld = arcpy.ListFields(table, pfldnm)
if bfld:
AllFields.append(bfld[0].name)
bfld = []
if pfld:
AllFields.append(pfld[0].name)
pfld = []