0

我环顾了整个网络,但似乎无法使这件事起作用。

我正在使用python2.6读取 csv 文件input.csv并希望在 python 中使用DictReaderDictWriter将其逐行输出到output.csv中。

我对input.csv的编码一无所知。当我打开output.csv时,对眼睛来说一切都很好,但是当我在两行上运行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

4

1 回答 1

3

文件可能有不同的行尾吗?您传递给csv.readercsv.writer应该以二进制模式打开的文件(请参阅文档),它看起来不像您正在做的。这可能会导致写入不正确的行尾字符。

于 2012-07-26T00:50:35.783 回答