Python 3无法在for循环之外打印字典

use*_*202 -2 python for-loop

我正在使用CSV文件数据,我需要将其拆分为字典.我使用以下代码:

ga_session_data = {}
ga_pageviews_data = {}

file = open('files/data.csv', 'r')

for line in file:
    page, sessions, pageviews = line.split(',')
    sessions = int(sessions.strip())
    pageviews = int(pageviews.strip())
    ga_session_data = {page: sessions}
    ga_pageviews_data = {page: pageviews}    

file.close()

print(ga_session_data)
print(ga_pageviews_data)
Run Code Online (Sandbox Code Playgroud)

由于某种原因,我无法打印存储在循环外的字典中的所有数据.它只打印每行的第一行.

Mar*_*ers 5

您没有在初始的空字典中添加任何内容.您每次使用词典替换它们:

ga_session_data = {page: sessions}
ga_pageviews_data = {page: pageviews}    
Run Code Online (Sandbox Code Playgroud)

这是两个新的词典,每个词典都有一个键值对.最后,在处理完文件中的最后一行之后,剩下的是文件中最后一行的信息,以及在替换之前处理的所有内容.

如果要添加到初始词典,请使用对键的赋值:

ga_session_data[page] = sessions
ga_pageviews_data[page] = pageviews
Run Code Online (Sandbox Code Playgroud)

您可以将int()转换内联到赋值表达式:

for line in file:
    page, sessions, pageviews = line.split(',')
    ga_session_data[page] = int(sessions)
    ga_pageviews_data[page] = int(pageviews)
Run Code Online (Sandbox Code Playgroud)

请注意,int()这并不关心数字周围的额外空格,因此str.strip()不需要调用.

接下来,我不会重新发明CSV读取轮; 使用csv模块:

import csv

ga_session_data = {}
ga_pageviews_data = {}

with open('files/data.csv', 'r') as csvfile:
    reader = csv.reader(csvfile)
    for row in reader:
        page, sessions, pageviews = row
        ga_session_data[page] = int(sessions)
        ga_pageviews_data[page] = int(pageviews)
Run Code Online (Sandbox Code Playgroud)

我还使用文件对象作为上下文管理器,因此您不必再显式调用file.close()它.