设置为空格的csv.DictWriter分隔符表示“”中的文本

时间:2013-08-26 10:48:22

标签: python csv dictionary

您好我注意到,在使用DictWriterdelimiter=' '代替','时,字符串将保存到""中的文件中,而不使用逗号。如何设置没有" "的字符串?

CODE

import csv
golds_two =[]
mydict ={}

with open ('fileA.csv','rU') as csvfile:
    wszystkie=csv.DictReader(csvfile,delimiter=',')
    for w in wszystkie:
        mydict[(w['URL']).split('/')[-1]]=w['MediaObject ID']


with open ('fileB.csv','rU') as csvfile:
    golds=csv.DictReader(csvfile,delimiter=';')
    for g in golds:
        g['MediaObject ID']=mydict[g['ID']]
        golds_two.append(g)


with open('fileC.csv','w') as F: 
        head_fields =golds_two[0].keys()
        head_fields.remove('ID')
        print head_fields
        head_fields=sorted(head_fields,reverse=True)
        csvdw = csv.DictWriter(F,delimiter=" ",fieldnames=head_fields)
        headers = dict( (n,n) for n in head_fields)

        for z in golds_two:
            z.pop('ID',None)
            print z
            csvdw.writerow(z)

fileA.csv:

MediaObject ID,URL
1152901,http://foo.bar/TRU716565.jpg
1152902,http://foo.bar/TRU716566.jpg

fileB.csv:

ID;Gold label
TRU716565.jpg;Identifable X
TRU716566.jpg;Non identfiable X

结果fileC.csv:

1152901 "Identifable X"
1152902 "Non identfiable X"

1 个答案:

答案 0 :(得分:2)

通常,要禁止引用csv文件中的数据字段,您只需要在quoting=csv.QUOTE_NONE构造函数调用中添加csv.DictWriter()关键字参数。

但是,在这种情况下执行此操作会导致异常,因为某些数据字段包含您尝试使用的demiliter字符(' '),以及不同的{{1还没有定义。这在documentation中提到:

  

如果未设置 escapechar ,则编写者将引发错误(如果有)   遇到需要转义的字符。

如果您考虑这一点,这一切都很有意义 - 如果字段中的数据本身包含未转义的分隔符字符,则csv文件将无法解析(即无效),因为无法从分隔符中分辨数据 - 它们是不可识别的 - 如果结果如下:

escapechar

因此将分隔符更改为1152901 Identifable X 1152902 Non identfiable X 将删除引号(如您已发现的那样),或者您可以在构造函数调用中定义"\t"(或其他)并将分隔符设置为escapechar="\\" - 因为文件的分隔符与其数据字段的内容之间不再存在冲突,或者在遇到它们时有办法逃避它们。

如果你真的希望结果是你出于某种未知原因所说的那样,你可以随时手动编写文件。

更新:以下是一种可能的解决方法,可将数据字段中的任何空格字符更改为" ",这是我系统上的一个不间断空格,但显示与常规空格字符相同

'\xa0'