我正在使用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)
由于某种原因,我无法打印存储在循环外的字典中的所有数据.它只打印每行的第一行.
您没有在初始的空字典中添加任何内容.您每次使用新词典替换它们:
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()它.