我试图理解/可视化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)
答案 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)