在电子表格中的单个单元格中写出逗号分隔值

时间:2015-04-27 01:21:03

标签: python csv

我正在为下面的输入列表中的每个要素类编目属性字段,然后我将输出写入电子表格,以便在一个或多个要素类中出现属性。

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”输出到电子表格,由相同单元格中的空格(“”)分隔。这并不是什么大不了的事,因为用“,”替换“”可以在电子表格本身很快完成,但将其用于代码以提高可重用性会很好。

2 个答案:

答案 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()