import unicodecsvdef read_csv(filename): with open(filename, 'rb') as f: reader = unicodecsv.DictReader(f) return list(reader)enrollments = read_csv('enrollments.csv')daily_engagement = read_csv('daily-engagement.csv')project_submissions = read_csv('project-submissions.csv')在上一课中,我学习了如何读取 CSV 文件并将其转换为可编辑的格式。代码效果很好,但是当我试图理解代码时,我不明白为什么当我打印时enrollments[0],结果是字典。该函数的第一部分使用with open(filename, 'rb') as f:我理解它是用来打开文件的。下一部分是reader = unicodecsv.DictReader(f),据我所知,它用于将读取的信息映射到字典中。第三部分是我难以理解的地方,即return list(reader)线路。这行不是意味着reader变量作为 a 返回list()吗?那么为什么当我使用打印时它会返回一本字典呢?print enrollments[0]{u'account_key': u'448', u'cancel_date': u'2015-01-14', u'days_to_cancel': u'65', u'is_canceled': u'True', u'is_udacity': u'True', u'join_date': u'2014-11-10', u'status': u'canceled'}
2 回答
郎朗坤
TA贡献1921条经验 获得超9个赞
第二部分
reader = unicodecsv.DictReader(f)
我知道它用于将读取的信息映射到字典中。
你很接近,但不完全正确。
DictReader()
将输入 CSV 文件中的每一行放入字典中。所以你会得到一系列字典,而不是一本字典。您通过迭代获得这些行,就像使用for
循环 ( for row in reader: ...
) 一样。list()
用途reader
作为一个迭代器创建的所有行的列表。
return list(reader)
在这里,我不是告诉计算机将变量读取器作为列表返回吗?
是的,您将reader
对象传递给list()
,它会从文件中的所有行生成一个列表对象。每一行都转换为字典,因此最终结果是一个字典列表。您可以将其视为result = []
for row in reader: result.append(row)
,result
列表是函数返回的内容。
然后获取该列表,并使用索引该列表0
,因此您请求列表中的第一个条目:
print enrollments[0]
这不会打印整个列表,而是从list打印一个元素。这个元素是一个字典,因为它是文件中第一行数据的数据。
如果您想打印列表本身,请使用
print enrollment
添加回答
举报
0/150
提交
取消