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
提交
取消