我有一个包含大量文章的.json文件,每篇文章的格式都是这样的:
{
"source": "....",
"title": ".......",
"original_time": "ora: 20:03, 06 dec 2006",
"datetime": "2006-12-06T20:03:00+00:00",
"views": 398,
"comments": 1,
"content": "..."
"id": "13",
}
现在我必须总结每个月和每年所有文章的观看次数并绘制结果...但我不知道如何做到这一点,因为我是python的新手......就是我所做的:
import json
#from pprint import pprint
import csv
import time
import datetime
views = []
time = []
art_timpul = 0
unimedia = 0
total_articles = 0
json_data=open('all.json')
data = json.load(json_data)
#pprint(data)
json_data.close()
for i in data:
if i["source"] == 'unimedia':
art_unimedia += 1
x = i["views"]
views.append(int(x))
y = i["original_time"]
time.append(y)
if i["source"] == 'timpul':
art_timpul += 1
total_articles += 1
myfile = open('output.csv', 'wb')
wr = csv.writer(myfile, quoting=csv.QUOTE_ALL)
wr.writerow(views)
print time
#print views
print "Articles from Unimedia", art_unimedia
print "Articles from Timpul", art_timpul
print "Total articles", total_articles
编辑:我必须按月和按年对数据进行分组,我必须总结那些月份和年份的文章中的nr个视图...并将它们导出到文件中
答案 0 :(得分:0)
您的问题并不完全清楚,但我会假设您在阅读和编写文件时没有问题,但只能解析日期字符串并对数据进行分组。
首先,解析日期。在这里你可以使用例如dateutil.parser.parse
或time.strptime
。 dateutil.parser
似乎期望默认格式与您的日期格式相同,因此我们将strptime
用{}代替configuring the format。
接下来,分组:最简单的方法是使用多个dictionaries映射月份或年份来查看。您也可以使用不同来源的字典,而不是现在拥有的那两个变量。只需使用月份或年份作为字典的键,并相应地更新值。为了让生活更轻松,我们可以使用collections.defaultdict
,因此我们不必检查该密钥是否已经存在。
按月分组的示例(类似于同一循环中的年份和来源等):
import collections, dateutil.parser
views_by_month = collections.defaultdict(int)
for item in data:
views = item["views"]
date = dateutil.parser.parse(item["datetime"])
views_by_month[date.month] += views
print views_by_month