TypeError:'_ csv.reader'对象没有属性'__getitem__'//获取列?

时间:2013-10-02 08:01:02

标签: python csv

我正在尝试打开.csv文件并将每个列放在不同的列表中:

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__'

是否有任何pythonic方法可以打开.csv文件并将每个列放在不同的列表中而不使用属性getitem

感谢。

注意:我还需要跳过第一行。

2 个答案:

答案 0 :(得分:3)

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

请注意,这会立即读取整个文件。如果文件中包含大量数据,则可能需要重新设计算法,以便在迭代CSV对象时一次处理一行数据,因此您无需保留这一切都在记忆中。

答案 1 :(得分:0)

这应该有效:

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