2016-07-05 61 views
0

使用csv.DictReader時是否沒有與readline()等價的內容?在循環之前,我需要跳過文件的標題行,並且使用readline()是使用普通讀取器變量這樣做的好方法。python的csv.DictReader的readline()的等效

+0

有現有技術的此;-)喜歡的答案提示,人們還可以看[3.2的Python跳過csv.DictReader線(http://stackoverflow.com/questions/4787723/python -3-2-skip-a-line-in-csv-dictreader)來命名我遇到的第一個... – Dilettant

回答

2

DictReader對象是一個迭代器,所以調用它的next方法(通過調用它next)應該跳過(或恢復)一行,就像readline會。

我需要循環

DictReader對象不指定標題行之前要跳過的文件的標題行。所有後續行(第一後)是否插值的字典,與第一排的按鍵,就像這樣:

r,t,s 
1,2,3 
2,4,6 

>>> f = open('sample.csv') 
>>> r = csv.DictReader(f) 
>>> next(r) 
{'s': '3', 't': '2', 'r': '1'} 
>>> next(r) 
{'s': '6', 't': '4', 'r': '2'} 

所以要跳過第一行,你必須調用next上的文件對象本身,然後再通過該文件對象來創建DictReader

1

DictReader()iterator object。使用next() function對象上得到各行:

reader = csv.DictReader(fileobj) 
row = next(reader, None) 

的第二個參數是next()默認值返回,如果可迭代爲空;如果沒有更多行要讀取,則row設置爲None

順便說一句,這也適用於文件對象。並且因爲DictReader()自動將讀取第一行(如果您未指定任何字段名稱),如果要防止使用第一行,則必須在從DictReader()對象讀取數據之前將fileobj移動到下一行:

next(fileobj, None) # skip first line of the file 
reader = csv.DictReader(fileobj)