在Python 101中解析CSV

时间:2015-06-12 09:13:41

标签: python parsing csv

我试图理解/可视化Python培训课程中dataquest.io解析原始csv数据文件的过程。

我理解rows = data.split('\n')根据换行符的位置将长串的csv文件拆分成行。即:

day1, sunny, \n day2, rain \n

变为

day1, sunny
day2, rain

我认为for循环会进一步将数据分解为:

day 1 
sunny 
day 2 
rain

相反,该课程似乎暗示它实际上会成为有用的列表列表。我不明白,为什么会这样?

weather_data = []

f = open("la_weather.csv", 'r')
data = f.read()
rows = data.split('\n')
for row in rows:
    split_row = row.split(",")
    weather_data.append(split_row)

3 个答案:

答案 0 :(得分:3)

我忽略了CSV的内容,只关注你的列表误解。拆分文本行时,它将成为字符串列表。也就是说,rows变为:["day1, sunny","day2, rain"]

应用于列表的for语句遍历该列表的元素。因此,第一次通过row"day1, sunny",第二次通过"day2, rain"等等。

在for循环的每次迭代中,它通过将逗号中的行拆分为例如["day1"," sunny"]来创建新列表。所有这些列表都会添加到您在开始时创建的weather_data列表中。您最终得到了一个列表列表,即[['day1', ' sunny'], ['day2', ' rain']]。如果你想要['day1', ' sunny', 'day2', ' rain'],你可以这样做:

for row in rows:
     split_row = row.split(",")
     for ele in split_row:
         weather_data.append(ele)

答案 1 :(得分:1)

该代码 使其成为列表列表。

正如你所说,第一个split将数据转换为一个列表,每行一个元素。

然后,对于每一行,第二行split将其转换为另一个列表,每列一个元素。

然后第二个列表作为单个项目附加到weather_data列表 - 现在,正如说明所示,列表是列表。

请注意,此代码不是很好 - 除了你总是使用csv模块之外,正如其他人指出的那样,你永远不会做{{ 1}}然后拆分结果。你只需f.read()自动迭代每一行。

答案 2 :(得分:0)

作为处理csv文件的更加pythonic和灵活的方式,您可以使用csv模块,而不是将其作为原始文本阅读:

import csv
with open("la_weather.csv", 'rb') as f:
  spamreader = csv.reader(f,delimiter=',')
  for row in spamreader:
      #do stuff

这里spamreader是一个读者对象,您可以将行作为元组进行循环遍历。

如果您想获取列表中的所有行,只需将spamreader转换为列表:

with open("la_weather.csv", 'rb') as f:
  spamreader = csv.reader(f,delimiter=',')
  print list(spamreader)