使用DictReader的TypeError

时间:2013-07-01 23:16:49

标签: python csv

我正在使用DictReader和DictWriter处理csv文件。

我尝试根据以下代码找到here

import csv

fieldnames = ['Node', 'ID', 'Test Description', 'file-name',
              'module', 'view', 'path1','path2'] # defines order in output file

with open('testdata.txt', 'rb') as csvinput:
    with open('testdata2.txt', 'wb') as csvoutput:
        csvwriter = csv.DictWriter(csvoutput, fieldnames, delimiter=',')
        csvwriter.writeheader()
        nodecount = 0
        for row in csv.DictReader(csvinput):
            nodecount +=1
            row['Node'] = 'node %s' % nodecount  # add 'Node' entry to row data
            csvwriter.writerow(row)

我正在使用python 3.2,我收到以下错误:

  File "/usr/lib/python3.2/csv.py", line 153, in writerow
  return self.writer.writerow(self._dict_to_list(rowdict))
TypeError: 'str' does not support the buffer interface

我读到这个错误可能是due to the fact that“如果您使用Python3x,那么string与Python 2.x的类型不同,您必须将其转换为字节(对其进行编码)。”

但是在这里,文件已经使用'b'参数(因此作为二进制文件)打开了吗?

1 个答案:

答案 0 :(得分:4)

您正在使用Python 2中的csv模块的Python 2示例。正如您所猜测的那样,作为str / bytes开关的一部分,为csv模块打开文件所需的模式改变了一点。 (我承认这种差异可能很令人头疼,但是在Python 3中,事情比Python 2更有意义,因此值得。)

正如the documentation所解释的那样,打开用于读/写的csv文件所需的新习惯是

with open('testdata.txt', newline='') as csvinput:
    with open('testdata2.txt', 'w', newline='') as csvoutput: