1

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

我尝试根据此处找到的以下代码工作:

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

我读到这个错误可能是由于“如果你使用 Python3x 则字符串与 Python 2.x 的类型不同,你必须将其转换为字节(对其进行编码)”。

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

4

1 回答 1

4

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

正如文档所解释的,打开 csv 文件进行读/写所需的新习惯用法是

with open('testdata.txt', newline='') as csvinput:
    with open('testdata2.txt', 'w', newline='') as csvoutput:
于 2013-07-01T23:33:43.430 回答