2013-06-24 70 views
2

通常情況下,csv.DictReader將使用.csv文件列標題的第一行,即鍵的字典:特殊情況要搶頭Python中DictReader

If the fieldnames parameter is omitted, the values in the first row of the csvfile will be used as the fieldnames. 

不過,我面對我的第一行這樣的事情:

#Format: header1 header2 header3 ...等等。

需要跳過#Format:,因爲它不是列標題。我可以這樣做:

column_headers = ['header1', 'header2', 'header3'] 
reader = csv.dictReader(my_file, delimiter='\t', fieldnames=column_headers) 

但我寧願有DictReader處理這個有兩個原因。

  1. 有很多列

  2. 列名稱可能隨時間而改變,這是一個季度的運行過程。

有一些方法有DictReader仍然使用的第一行作爲列標題,但跳過第一#Format:字?或者真的任何以#開頭的單詞都可能就足夠了。

回答

3

作爲DictReader包裝打開的文件,你可以讀取文件的第一行,從那裏解析頭(headers = my_file.readline().split(delimiter)[1:],或類似的東西),然後將它們傳遞給DictReader()fieldnames參數。 DictReader構造函數不會重置該文件,因此在解析完文件後,您不必擔心讀取頭標列表中的內容。

+0

不錯,我喜歡這樣。我以爲我可以在某個地方粘貼一個'lambda()',但這更直接,也可能更簡潔一些。 – Houdini

+0

@Houdini不客氣。 – JAB