我是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
的代码不会提供类似的列表?
答案 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