2013-05-30 124 views
3

我試圖從csv文件讀取數據。我將quotechar設置爲csv.QUOTE_NONE。 Python中的四行我寫了這個目的只是如下 -TypeError:「quotechar」必須是1個字符的字符串

import csv 
with open('mtz.gps.comfort_gps_logs_20110214_20110215.csv', 'rb') as csvfile: 
    taxiDataReader = csv.reader(csvfile, delimiter = ',', quotechar = csv.QUOTE_NONE) 
    for row in taxiDataReader: 
     print row 

然而,當我運行這些,我得到這個錯誤信息 -

Traceback (most recent call last): 
    File "log.py", line 3, in <module> 
    taxiDataReader = csv.reader(csvfile, delimiter = ',', quotechar = csv.QUOTE_NONE) 
TypeError: "quotechar" must be an 1-character string 

我不僅想了解爲什麼這個特定的錯誤顯示出來,而且更詳細地理解了quotechar真正的作用。我是使用Python進行csv解析的新手,因此請隨時將我引導至任何我首先應該閱讀的主題的鏈接:)

如往常一樣感謝。

回答

9

QUOTE_NONE表示參數quoting的值,而不是quotechar

正確的方法是使用

taxiDataReader = csv.reader(csvfile, delimiter=',', quoting=csv.QUOTE_NONE) 

The docs statequotechar必須始終是一個字符的字符串,其作用是簡單地選擇應該用於引用的字符。

引用在各種情況下是必需的,例如

  • 如果一個CSV字段包含分隔符(例如逗號)
  • 如果一個CSV字段包含一個換行字符。

在這兩種情況下,CSV閱讀器都需要知道這些字符是指文字字符,而不是控制字符。所以,如果你希望把這些值[1, "hello", "1,2,3", "hi\nthere"]到CSV文件中,這將是非常糟糕的,如果結果是

1,hello,1,2,3,hi 
there 

不是嗎?因此,這些領域被引用:

1,hello,"1,2,3","hi\nthere" 

quoting控制會有什麼時候(默認爲QUOTE_MINIMAL,即,只有當報價是絕對必要的)被引用。如果您完全關閉報價(QUOTE_NONE),quotechar的值當然毫無意義。

+0

我仍然不清楚quotechar和引用的作用是什麼。爲什麼要引用某些東西?如果你可以用一些CSV數據作爲例子來解釋這個問題,那將是非常棒的,所以我可以理解這個需求。非常感謝您的回答! –

+0

@ShubhamGoyal:當然,我希望現在更清楚。 –

+0

但是,當讀取CSV文件時,QUOTE_NONE有沒有意義?被引用的字段已經被引用。另外,你能否詳細說明quotechar呢?感謝您的耐心和努力:) –

相關問題