2013-07-01 73 views
1

我正在使用DictReader和DictWriter的csv文件。類型錯誤與DictReader

我試圖根據下面的代碼工作中發現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,則字符串與Python 2.x的類型不同,必須將其轉換爲字節(將其編碼)。」

但在這裏,文件已經打開使用'b'參數(因此作爲二進制文件)對嗎?

回答

4

您使用一個Python 2例爲在Python 3. csv模塊,你猜,作爲STR的一部分/字節的開關,打開文件的csv模塊所需要的模式改變了一點點。 (我承認這種差異可能會讓人頭疼,但Python 3中的東西比Python 2更有意義,因爲它是值得的。)

由於the documentation解釋了,打開用於讀/寫的csv文件所需的新成語是

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

我不知道打開文件的習語已經改變... 我這樣工作。非常感謝! – bigTree