2010-10-15 64 views
3

我想通過使用CSV模塊在Python中提取CSV文件的頭。csvreader.fieldnames未被識別爲python中csv閱讀器對象的屬性

CSV文件是非常平坦的,看起來是這樣的:

This, That, The Other

1, 2, 3

我做了以下內容:

  1. 讀的CSV文件,使讀者對象
  2. 推閱讀器的迭代器到下一行強制它至少訪問第一行(從csv模塊文檔中獲得:「如果在創建對象時不作爲參數傳遞,則此屬性將在第一次訪問時初始化,或者當第一個記錄爲rea 。從文件d「)
  3. 分配.fieldnames屬性到一個變量並將其打印

這裏是一個代碼段來說明:

datafile = open(fname, "rb") 
reader = csv.reader(datafile) #use csv module to parse in the header 
reader.next() # read next line so header will be accessed 
rfd_header = reader.fieldnames 

print "header:\n" 
print rfd_header 

這將導致一個錯誤:

AttributeError: '_csv.reader' object has no attribute 'fieldnames'

聽起來像.fieldnames屬性不存在,但是在Python 2.6.6的文檔中(我是同一版本的Python使用)

我將不勝感激這個謎。如果有另一種方法來提取頭也很棒!

謝謝。

回答

6

如果你真的想要,而不是使用CSV的csv.reader。DictReader,所有你需要做的是更換

reader.next() # read next line so header will be accessed 
rfd_header = reader.fieldnames 

通過

rfd_header = reader.next() 
+0

謝謝!這真的很好。我明白爲什麼DictReader可能是更好的方法,但對於我的應用程序,我需要一個列表。 – Jeff 2010-10-16 14:34:59

4

嘗試csv.DictReader而不是csv.reader。文檔指出過:

DictReader對象有下列公共屬性:

csvreader.fieldnames - 如果創建對象時沒有作爲參數傳遞,這個屬性是在第一次訪問時或初始化從文件中讀取第一條記錄。

http://docs.python.org/library/csv.html

+0

你說得很對,我一定是誤解了文檔:P我會用DictReader但它只是恰巧,我需要一個列表。感謝您的提示,但! – Jeff 2010-10-16 14:36:36

+0

什麼是「此屬性初次訪問時初始化」是什麼意思? 對我來說,這聽起來像這個類會在任何需要的時候對字段名進行延遲初始化。 – MartinP 2014-07-02 19:15:46

0

如果您需要的結果列表中,你可以採取:

rfd_header = reader.next() 

這應該存儲在第一行(header/fields)給變量「rfd_header」

然後你可以迭代變量的值並把i n要列表

headerList = [] 
for item in rfd_header: 
    headerList.append(item) 

然後你就可以打印結果

print headerList