我正在为下面的输入列表中的每个要素类编目属性字段,然后我将输出写入电子表格,以便在一个或多个要素类中出现属性。
import arcpy,collections,re
arcpy.env.overwriteOutput = True
input = [list of feature classes]
outfile= # path to csv file
f=open(outfile,'w')
f.write('ATTRIBUTE,FEATURE CLASS\n\n')
mydict = collections.defaultdict(list)
for fc in input:
cmp=[]
lstflds=arcpy.ListFields(fc)
for fld in lstflds:
cmp.append(fld.name)
for item in cmp:
mydict[item].append(fc)
for keys, vals in mydict.items():
#remove these characters
char_removal = ["[","'",",","]"]
new_char = '[' + re.escape(''.join(char_removal)) + ']'
v=re.sub(new_char,'', str(vals))
line=','.join([keys,v])+'\n'
print line
f.write(line)
f.close()
这段代码让我获得90%的预期解决方案。我仍然无法通过相同单元格中的逗号分隔要素类(值)(以逗号分隔,它将每个值移动到我提到的下一列)。在此特定代码中,第20行(要素类名称)上的“v”输出到电子表格,由相同单元格中的空格(“”)分隔。这并不是什么大不了的事,因为用“,”替换“”可以在电子表格本身很快完成,但将其用于代码以提高可重用性会很好。
答案 0 :(得分:0)
对于CSV文件,请在单元格内容周围使用双引号来保留内部逗号,如下所示:
content1,content2,"content3,contains,commas",content4
一般来说,许多输出CSV的库只是将所有内容都放在引号中,如下所示:
"content1","content2","content3,contains,commas","content4"
作为旁注,我强烈建议使用现有的库来创建CSV文件,而不是重新发明轮子。其中一个库是built into Python 2.6+。
正如他们所说,“好的程序员写道。伟大的程序员重用。”
答案 1 :(得分:0)
import arcpy,collections,re,csv
arcpy.env.overwriteOutput = True
input = [# list of feature classes]
outfile= # path to output csv file
f=open(outfile,'wb')
csv_write=csv.writer(f)
csv_write.writerow(['Field','Feature Class'])
csv_write.writerow('')
mydict = collections.defaultdict(list)
for fc in input:
cmp=[]
lstflds=arcpy.ListFields(fc)
for fld in lstflds:
cmp.append(fld.name)
for item in cmp:
mydict[item].append(fc)
for keys, vals in mydict.items():
# remove these characters
char_removal = ["[","'","]"]
new_char = '[' + re.escape(''.join(char_removal)) + ']'
v=re.sub(new_char,'', str(vals))
csv_write.writerow([keys,""+v+""])
f.close()