使用两个不同的读取行命令在python 2.7中创建CSV文件列表

时间:2014-06-28 19:35:29

标签: list python-2.7 csv

我是Python 2.7的新手,并使用以下代码创建从csv文件中提取的观察列表。

import csv
data = []
with open(datafile,'rb') as f:
    for row in f:
       g=row
       data.append(g)

它产生以下列表(在读完第一行之后):

['01/01/2005,01:00,0,0,0,2,0,0,2,0,0,2,0,0,2,0,0,2,0,0,2,0,0,2,0,3,E,9,3,E,9,8.0,A,7,6.0,A,7,87,A,7,1013,A,7,150,A,7,2.1,A,7,16100,A,7,77777,A,7,1.1,E,8,0.099,F,8,0.160,F,8,0,1,A,7']

但是当我使用以下代码读取csv文件并创建列表时:

data = []
with open(datafile,'rb') as f:
    r = csv.reader(f)
    for row in f
        data = [row for row in r]

我得到一个如下所示的列表(在读完第一行之后):

['01/01/2005', '01:00', '0', '0', '0', '2', '0', '0', '2', '0', '0', '2', '0', '0', '2', '0', '0', '2', '0', '0', '2', '0', '0', '2', '0', '3', 'E', '9', '3', 'E', '9', '8.0', 'A', '7', '6.0', 'A', '7', '87', 'A', '7', '1013', 'A', '7', '150', 'A', '7', '2.1', 'A', '7', '16100', 'A', '7', '77777', 'A', '7', '1.1', 'E', '8', '0.099', 'F', '8', '0.160', 'F', '8', '0', '1', 'A', '7']

这似乎也是一个列表(关键区别在于列表中每个项目周围的撇号,而不仅仅是在开头和结尾)。

由于两者似乎都是列表,为什么使用data.append的代码不会提供类似的列表?

1 个答案:

答案 0 :(得分:1)

你的第一个列表只有一个元素 - 一个包含整行的字符串,包含所有逗号。

>>> l1 =['01/01/2005,01:00,0,0,0,2,0,0,2,0,0,2,0,0,2,0,0,2,0,0,2,0,0,2,0,3,E,9,3,E,9,8.0,A,7,6.0,A,7,87,A,7,1013,A,7,150,A,7,2.1,A,7,16100,A,7,77777,A,7,1.1,E,8,0.099,F,8,0.160,F,8,0,1,A,7']
>>> len(l1)
1

在第二个示例中,csv.reader将此行拆分为多个元素并将其放入列表中。

>>> l2 = ['01/01/2005', '01:00', '0', '0', '0', '2', '0', '0', '2', '0', '0', '2', '0', '0', '2', '0', '0', '2', '0', '0', '2', '0', '0', '2', '0', '3', 'E', '9', '3', 'E', '9', '8.0', 'A', '7', '6.0', 'A', '7', '87', 'A', '7', '1013', 'A', '7', '150', 'A', '7', '2.1', 'A', '7', '16100', 'A', '7', '77777', 'A', '7', '1.1', 'E', '8', '0.099', 'F', '8', '0.160', 'F', '8', '0', '1', 'A', '7']
>>> len(l2)
68

另请注意,第二个示例中的循环有些奇怪。我假设这不是你的实际代码,因为它有一个语法错误。它可能应该是:

r = csv.reader(f)
for row in r:         # row in r, not row in f
    data.append(row)  # append row to data -> 2d-array of items in rows