import unicodecsv
def 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
变量作为list()
返回吗?
那为什么在我使用print时为什么返回字典?
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'}
答案 0 :(得分:0)
注册是一个列表
注册人数[0]是字典
所以报名是词典列表。
一切正常,read_csv返回一个(字典)列表
答案 1 :(得分:0)
第二部分
reader = unicodecsv.DictReader(f)
我了解它用于将读取的信息映射到字典中。
您关闭,但不太正确。
DictReader()
将输入CSV文件中的每行放入字典中。这样就得到了词典的系列,而没有一个字典。您可以通过 iterating 获得这些行,就像使用for
循环(for row in reader: ...
)一样。 list()
使用reader
作为迭代器来创建所有行的列表。
return list(reader)
在这里我不是告诉计算机将变量阅读器作为列表返回吗?
是的,您正在将reader
对象传递给list()
,该对象从文件中的所有行生成一个列表对象。每行都将转换为字典,因此最终结果是字典列表。您可能会看到它是result = []
for row in reader: result.append(row)
,而result
列表是该函数返回的内容。
然后获取该列表,并使用0
index 对该列表进行索引,因此您要求在列表中输入 first :
print enrollments[0]
这不会打印整个列表,而是从列表中 打印一个元素。而且那个元素是一个字典,因为这是文件中第一行数据的数据。
如果要打印列表本身,请使用
print enrollment