2013-10-02 45 views
0

我試圖打開一個.csv文件,並把每一列在不同的列表:TypeError:'_csv.reader'對象沒有屬性'__getitem__'//獲取列?

import csv 
CSV = csv.reader(open("AAPL.csv","rb")) 
column1 = CSV[0] 
column2 = CSV[1] 
column3 = CSV[2] 
column4 = CSV[2] 
column5 = CSV[4] 
column6 = CSV[5] 

這是我AAPL.csv

Date  Open High Low  Close Volume Adj Close 
2013-09-27 874.82 877.52 871.31 876.39 1258800 876.39 
2013-09-26 878.3 882.75 875  878.17 1259900 878.17 
2013-09-25 886.55 886.55 875.6 877.23 1649000 877.23 
2013-09-24 886.5 890.1 881.4 886.84 1467000 886.84 
2013-09-23 896.15 901.59 885.2 886.5 1777400 886.5 
2013-09-20 898.39 904.13 895.62 903.11 4345300 903.11 
2013-09-19 905.99 905.99 895.4 898.39 1597900 898.39 
2013-09-18 886.35 903.97 883.07 903.32 1934700 903.32 
2013-09-17 887.41 888.39 881  886.11 1259400 886.11 
2013-09-16 896.2 897  884.87 887.76 1336500 887.76 
............................................................. 
end of file: 
............................................................. 
2012-06-29 574.96 58013 572.20 580.07 2519500 580.07 
2012-06-28 565.90 566.23 557.21 564.31 1920900 564.31 
2012-06-27 567.70 573.99 566.02 569.30 1692300 569.30 
2012-06-26 562.76 566.60 559.48 564.68 1350200 564.68 
2012-06-25 567.33 568.09 557.35 560.70 1581600 560.70 

當我運行我的代碼,它返回我下面錯誤:

Traceback (most recent call last): 
    File "/home/misha/Documents/finance/prices/some_csv.py", line 3, in <module> 
    column1 = CSV[0] 
TypeError: '_csv.reader' object has no attribute '__getitem__' 

有沒有打開一個.csv文件,並把每一列在不同的列表中未使用的屬性getitem任何Python的方式?

謝謝。

注意:我還需要跳過第一行。

回答

3

A csv.reader實例是一個可迭代的CSV文件。如果你想在一個單獨的列表中的每個列,你可以使用zip功能:

import csv 

with open("AAPL.csv", "rb") as f: 
    CSV = csv.reader(f) 

    header = next(CSV) # read the header row 
    column_data = zip(*CSV) # read data and arrange by columns instead of by rows 

# do stuff with column_lists 

注意,此讀取一次整個文件。如果文件中的數據量非常大,則可能需要重新設計算法,以便在遍歷對象時一次處理一行數據,因此不需要全部保存在內存中。

+0

由於OP希望存儲列值的列表,然後我猜內存是不是一個問題。 –

+0

是的,我想我的意圖主要是問「你確定你真的想要列表列表嗎?數據不是以這種方式本地組織的。」提問者似乎認爲數據是按列組織的,可能無論他們計劃如何處理列列表,都可以一行一行輕鬆完成。 (例如,他們可能已經計劃對某些列進行「拉鍊」來遍歷它們。) – Blckknght

0

這應該工作:

import csv 
CSV = csv.reader(open("AAPL.csv","rb")) 
for col in CSV: 
    column1 = col[0]  
    column2 = col[1] 
    column3 = col[3] 
相關問題