DictWriter编码错误

时间:2012-07-26 00:46:06

标签: python parsing csv

我看了很多网,但似乎无法让这件事发挥作用。

我正在使用 python2.6 来读取csv文件 input.csv ,并希望将其逐行输出到 output.csv < / strong>在python中使用 DictReader DictWriter

我对 input.csv 的编码一无所知。 当我打开 output.csv 时,对于EYES一切都很好但是当我在两行上运行 diff 命令时,每条线都不同。我需要文件的字节序列是相同的,因为我将文件作为赋值提交。

这是我所拥有的代码(从这里和那里借来的):

from csv import DictReader,DictWriter

class DictWriterEx(DictWriter):
    def writeheader(self):
        header = dict(zip(self.fieldnames, self.fieldnames))
        self.writerow(header)

with open('input.csv','rb',) as f:
    dr = DictReader(f)
    with open('output.csv','wb') as o:
        dw = DictWriterEx(o,fieldnames=dr.fieldnames)
        dw.writeheader()
        for row in dr:
            dw.writerow(dict((k, v) for k, v in row.iteritems()))

我也尝试过更改

dw.writerow(dict((k, v) for k, v in row.iteritems()))

进入

dw.writerow(dict((k, v.encode('utf-8')) for k, v in row.iteritems()))

这给了我例外:

  

UnicodeDecodeError:'ascii'编解码器无法解码位置7中的字节0xc3:序数不在范围内(128)

请帮我解决这个问题因为我疯了。

解决方案:使用 lineterminator =“/ n”

初始化 DictWriter

1 个答案:

答案 0 :(得分:3)

文件是否可能有不同的行结尾?您传递给csv.readercsv.writer的文件应以二进制模式打开(请参阅the documentation),它看起来不像您正在做的那样。这可能导致写入错误的行尾字符。