【问题标题】:Python parsing (think its JSON)Python 解析(想想它的 JSON)
【发布时间】:2019-12-16 02:42:16
【问题描述】:

重新表述的问题:

嗨,

当我运行这段代码时:

import pageviewapi
views = pageviewapi.per_article('en.wikipedia', 'Samuel_John_Carter','20150701','20191201', access='all-access', agent='user', granularity='monthly')   
print(views)
print(type(views))

我得到这个结果:

AttrDict({'items': [{'project': 'en.wikipedia', 'article': 'Samuel_John_Carter', 'granularity': 'monthly', 'timestamp': '2015070100', 'access': 'all-access', 'agent': 'user', 'views': 75}, {'project': 'en.wikipedia', 'article': 'Samuel_John_Carter', 'granularity': 'monthly', 'timestamp': '2015080100', 'access': 'all-access', 'agent': 'user', 'views': 64}, {'project': 'en.wikipedia', 'article': 'Samuel_John_Carter', 'granularity': 'monthly', 'timestamp': '2015090100', 'access': 'all-access', 'agent': 'user', 'views': 94}, {'project': 'en.wikipedia', 'article': 'Samuel_John_Carter', 'granularity': 'monthly', 'timestamp': '2015100100', 'access': 'all-access', 'agent': 'user', 'views': 90}, {'project': 'en.wikipedia', 'article': 'Samuel_John_Carter', 'granularity': 'monthly', 'timestamp': '2015110100', 'access': 'all-access', 'agent': 'user', 'views': 91}, {'project': 'en.wikipedia', 'article': 'Samuel_John_Carter', 'granularity': 'monthly', 'timestamp': '2015120100', 'access': 'all-access', 'agent': 'user', 'views': 73}, {'project': 'en.wikipedia', 'article': 'Samuel_John_Carter', 'granularity': 'monthly', 'timestamp': '2016010100', 'access': 'all-access', 'agent': 'user', 'views': 91}, {'project': 'en.wikipedia', 'article': 'Samuel_John_Carter', 'granularity': 'monthly', 'timestamp': '2016020100', 'access': 'all-access', 'agent': 'user', 'views': 88}, {'project': 'en.wikipedia', 'article': 'Samuel_John_Carter', 'granularity': 'monthly', 'timestamp': '2016030100', 'access': 'all-access', 'agent': 'user', 'views': 82}, {'project': 'en.wikipedia', 'article': 'Samuel_John_Carter', 'granularity': 'monthly', 'timestamp': '2016040100', 'access': 'all-access', 'agent': 'user', 'views': 95}, {'project': 'en.wikipedia', 'article': 'Samuel_John_Carter', 'granularity': 'monthly', 'timestamp': '2016050100', 'access': 'all-access', 'agent': 'user', 'views': 86}, {'project': 'en.wikipedia', 'article': 'Samuel_John_Carter', 'granularity': 'monthly', 'timestamp': '2016060100', 'access': 'all-access', 'agent': 'user', 'views': 76}, {'project': 'en.wikipedia', 'article': 'Samuel_John_Carter', 'granularity': 'monthly', 'timestamp': '2016070100', 'access': 'all-access', 'agent': 'user', 'views': 75}, {'project': 'en.wikipedia', 'article': 'Samuel_John_Carter', 'granularity': 'monthly', 'timestamp': '2016080100', 'access': 'all-access', 'agent': 'user', 'views': 81}, {'project': 'en.wikipedia', 'article': 'Samuel_John_Carter', 'granularity': 'monthly', 'timestamp': '2016090100', 'access': 'all-access', 'agent': 'user', 'views': 79}, {'project': 'en.wikipedia', 'article': 'Samuel_John_Carter', 'granularity': 'monthly', 'timestamp': '2016100100', 'access': 'all-access', 'agent': 'user', 'views': 173}, {'project': 'en.wikipedia', 'article': 'Samuel_John_Carter', 'granularity': 'monthly', 'timestamp': '2016110100', 'access': 'all-access', 'agent': 'user', 'views': 170}, {'project': 'en.wikipedia', 'article': 'Samuel_John_Carter', 'granularity': 'monthly', 'timestamp': '2016120100', 'access': 'all-access', 'agent': 'user', 'views': 84}, {'project': 'en.wikipedia', 'article': 'Samuel_John_Carter', 'granularity': 'monthly', 'timestamp': '2017010100', 'access': 'all-access', 'agent': 'user', 'views': 131}, {'project': 'en.wikipedia', 'article': 'Samuel_John_Carter', 'granularity': 'monthly', 'timestamp': '2017020100', 'access': 'all-access', 'agent': 'user', 'views': 76}, {'project': 'en.wikipedia', 'article': 'Samuel_John_Carter', 'granularity': 'monthly', 'timestamp': '2017030100', 'access': 'all-access', 'agent': 'user', 'views': 94}, {'project': 'en.wikipedia', 'article': 'Samuel_John_Carter', 'granularity': 'monthly', 'timestamp': '2017040100', 'access': 'all-access', 'agent': 'user', 'views': 234}, {'project': 'en.wikipedia', 'article': 'Samuel_John_Carter', 'granularity': 'monthly', 'timestamp': '2017050100', 'access': 'all-access', 'agent': 'user', 'views': 213}, {'project': 'en.wikipedia', 'article': 'Samuel_John_Carter', 'granularity': 'monthly', 'timestamp': '2017060100', 'access': 'all-access', 'agent': 'user', 'views': 286}, {'project': 'en.wikipedia', 'article': 'Samuel_John_Carter', 'granularity': 'monthly', 'timestamp': '2017070100', 'access': 'all-access', 'agent': 'user', 'views': 190}, {'project': 'en.wikipedia', 'article': 'Samuel_John_Carter', 'granularity': 'monthly', 'timestamp': '2017080100', 'access': 'all-access', 'agent': 'user', 'views': 186}, {'project': 'en.wikipedia', 'article': 'Samuel_John_Carter', 'granularity': 'monthly', 'timestamp': '2017090100', 'access': 'all-access', 'agent': 'user', 'views': 175}, {'project': 'en.wikipedia', 'article': 'Samuel_John_Carter', 'granularity': 'monthly', 'timestamp': '2017100100', 'access': 'all-access', 'agent': 'user', 'views': 212}, {'project': 'en.wikipedia', 'article': 'Samuel_John_Carter', 'granularity': 'monthly', 'timestamp': '2017110100', 'access': 'all-access', 'agent': 'user', 'views': 255}, {'project': 'en.wikipedia', 'article': 'Samuel_John_Carter', 'granularity': 'monthly', 'timestamp': '2017120100', 'access': 'all-access', 'agent': 'user', 'views': 231}, {'project': 'en.wikipedia', 'article': 'Samuel_John_Carter', 'granularity': 'monthly', 'timestamp': '2018010100', 'access': 'all-access', 'agent': 'user', 'views': 339}, {'project': 'en.wikipedia', 'article': 'Samuel_John_Carter', 'granularity': 'monthly', 'timestamp': '2018020100', 'access': 'all-access', 'agent': 'user', 'views': 257}, {'project': 'en.wikipedia', 'article': 'Samuel_John_Carter', 'granularity': 'monthly', 'timestamp': '2018030100', 'access': 'all-access', 'agent': 'user', 'views': 299}, {'project': 'en.wikipedia', 'article': 'Samuel_John_Carter', 'granularity': 'monthly', 'timestamp': '2018040100', 'access': 'all-access', 'agent': 'user', 'views': 254}, {'project': 'en.wikipedia', 'article': 'Samuel_John_Carter', 'granularity': 'monthly', 'timestamp': '2018050100', 'access': 'all-access', 'agent': 'user', 'views': 262}, {'project': 'en.wikipedia', 'article': 'Samuel_John_Carter', 'granularity': 'monthly', 'timestamp': '2018060100', 'access': 'all-access', 'agent': 'user', 'views': 242}, {'project': 'en.wikipedia', 'article': 'Samuel_John_Carter', 'granularity': 'monthly', 'timestamp': '2018070100', 'access': 'all-access', 'agent': 'user', 'views': 197}, {'project': 'en.wikipedia', 'article': 'Samuel_John_Carter', 'granularity': 'monthly', 'timestamp': '2018080100', 'access': 'all-access', 'agent': 'user', 'views': 187}, {'project': 'en.wikipedia', 'article': 'Samuel_John_Carter', 'granularity': 'monthly', 'timestamp': '2018090100', 'access': 'all-access', 'agent': 'user', 'views': 191}, {'project': 'en.wikipedia', 'article': 'Samuel_John_Carter', 'granularity': 'monthly', 'timestamp': '2018100100', 'access': 'all-access', 'agent': 'user', 'views': 223}, {'project': 'en.wikipedia', 'article': 'Samuel_John_Carter', 'granularity': 'monthly', 'timestamp': '2018110100', 'access': 'all-access', 'agent': 'user', 'views': 256}, {'project': 'en.wikipedia', 'article': 'Samuel_John_Carter', 'granularity': 'monthly', 'timestamp': '2018120100', 'access': 'all-access', 'agent': 'user', 'views': 211}, {'project': 'en.wikipedia', 'article': 'Samuel_John_Carter', 'granularity': 'monthly', 'timestamp': '2019010100', 'access': 'all-access', 'agent': 'user', 'views': 255}, {'project': 'en.wikipedia', 'article': 'Samuel_John_Carter', 'granularity': 'monthly', 'timestamp': '2019020100', 'access': 'all-access', 'agent': 'user', 'views': 244}, {'project': 'en.wikipedia', 'article': 'Samuel_John_Carter', 'granularity': 'monthly', 'timestamp': '2019030100', 'access': 'all-access', 'agent': 'user', 'views': 257}, {'project': 'en.wikipedia', 'article': 'Samuel_John_Carter', 'granularity': 'monthly', 'timestamp': '2019040100', 'access': 'all-access', 'agent': 'user', 'views': 230}, {'project': 'en.wikipedia', 'article': 'Samuel_John_Carter', 'granularity': 'monthly', 'timestamp': '2019050100', 'access': 'all-access', 'agent': 'user', 'views': 234}, {'project': 'en.wikipedia', 'article': 'Samuel_John_Carter', 'granularity': 'monthly', 'timestamp': '2019060100', 'access': 'all-access', 'agent': 'user', 'views': 199}, {'project': 'en.wikipedia', 'article': 'Samuel_John_Carter', 'granularity': 'monthly', 'timestamp': '2019070100', 'access': 'all-access', 'agent': 'user', 'views': 224}, {'project': 'en.wikipedia', 'article': 'Samuel_John_Carter', 'granularity': 'monthly', 'timestamp': '2019080100', 'access': 'all-access', 'agent': 'user', 'views': 207}, {'project': 'en.wikipedia', 'article': 'Samuel_John_Carter', 'granularity': 'monthly', 'timestamp': '2019090100', 'access': 'all-access', 'agent': 'user', 'views': 255}, {'project': 'en.wikipedia', 'article': 'Samuel_John_Carter', 'granularity': 'monthly', 'timestamp': '2019100100', 'access': 'all-access', 'agent': 'user', 'views': 265}, {'project': 'en.wikipedia', 'article': 'Samuel_John_Carter', 'granularity': 'monthly', 'timestamp': '2019110100', 'access': 'all-access', 'agent': 'user', 'views': 330}]})

<class 'attrdict.dictionary.AttrDict'>

我是一个新手白指关节我的方式在这里。任何人都可以建议一种特定的方法来获取所有时间戳:从这个凌乱的输出中查看数据点吗?我很想知道这是嵌套字典还是 json 对象。

非常感谢任何人能够提供的任何帮助!


*原问题: 在这里旋转我的轮子。我正在尝试使用 Python 脚本的输出。当我打印输出时,我会得到类似的东西(当然更多)。

AttrDict({'items': [{'project': 'fr.wikipedia', 'article': 'Samuel_John_Carter', 'granularity': 'monthly', 'timestamp': '2019010100', 'access': 'all-access', 'agent': 'user', 'views': 35}, {'project': 'fr.wikipedia', 'article': 'Samuel_John_Carter', 'granularity': 'monthly', 'timestamp': '2019020100', 'access': 'all-access', 'agent': 'user', 'views': 11}]})
AttrDict({'items': [{'project': 'en.wikipedia', 'article': 'Giovanni_Battista_Merano', 'granularity': 'monthly', 'timestamp': '2015070100', 'access': 'all-access', 'agent': 'user', 'views': 35}, {'project': 'en.wikipedia', 'article': 'Giovanni_Battista_Merano', 'granularity': 'monthly', 'timestamp': '2015080100', 'access': 'all-access', 'agent': 'user', 'views': 35}]})

我要做的是通过有选择地构建行来解析数据。如果有人能帮我弄清楚如何从这些数据中获取文章、时间戳和视图的所有数据点(例如),我想我会很高兴的。 我注意到即使这个东西是 JSON 或 Python 字典(print(type())返回“class 'attrdict.dictionary.AttrDict'”。 任何帮助,将不胜感激。 谢谢!**


【问题讨论】:

  • AttrDict 来自哪个库?
  • attrdict 不是 Python 标准库的一部分。您直接或间接使用它。
  • 括号内的位是有效的python字典,虽然它也可能是有效的JSON
  • 1. pageviewapi.per_article 正在生成混乱的文本,设置为变量“views” 2. 当我打印(type(views))时,我得到

标签: python json dictionary parsing nested


【解决方案1】:

我猜你正在使用 JSON 库的 load()(或 load())函数?

load()/loads() 都将 JavaScript 对象转换为 Python 中的嵌套字典。这就是为什么打印起来很乱的原因。

我不完全理解您的问题是什么,但是您应该能够通过将 load()/loads() 视为字典来与任何返回的内容进行交互。 这是 JSON 库文档的链接(我猜你已经看过了)[1]

如果您有任何问题,请告诉我!

【讨论】:

  • 老实说,我是一个试图不溺水的新手。数据是通过使用 pageviewapi 询问每月的维基百科页面查看次数生成的。我认为它充当 REST API 调用的包装器并返回我认为是 JSON 的结果。使用提供的数据,您能否建议解决示例挑战的确切代码?那真的很有帮助。
  • 所以我不确定你的 sn-p 中的哪篇文章。我想我也许可以帮助你破译你在看什么。让我们先看看字典格式:假设我制作了一个字典my_dict = {}。然后,假设我添加了映射my_dict["france"] = "baguette"。如果我做print(my_dict),输出将是{'france': 'baguette'}。现在假设我有一个到列表的条目映射,例如my_dict["france"] = ["baguette", "frog legs"]。然后,当我执行print(my_dict) 时,输出将是{'france': ['baguette', 'frog legs']。开始看起来熟悉了吗? 继续 下面
  • 现在,假设我制作了一个字典,其中的条目映射到另一个字典:new_dict["germany"] = my_dict。然后,print(new_dict) 有输出{'germany': {'france': ['baguette, 'frog legs']}}。最后,让我们尝试使用映射到字典列表的条目的字典:new_dict["germany"] = [my_dict, my_dict]。现在,print(new_dict) 输出 {'germany': [{'france': ['baguette, 'frog legs']}, {'france': ['baguette, 'frog legs']}]}。这就是你所拥有的:字典列表的字典。这有意义吗?这能帮助你解释你的输出吗?
【解决方案2】:

这不是一个的方法,但它应该可以工作:

假设print(foo) 为您提供了您发布的示例输出的一行:

将输出修剪到括号内的部分:

s = str(foo)
s = s[10:-1]

创建一个字符串,将其存储在变量中:

s = "d = " + s

运行该代码

exec(s)

这将使变量d 成为foo 所代表的字典。

显然,在使用 exec 时要小心,并确保输入不是来自可能是恶意的东西。

【讨论】:

  • 抱歉,仍在尝试理解答案。你认为它能让我从这个可能是 JSON 或嵌套字典中获取所有四个数据点集吗?谢谢!
【解决方案3】:

所以在我看来views 是一个嵌套字典。该类型表示 AttrDict,虽然我不知道那是什么,但我猜它的接口类似于 Python 的内置字典。如果你这样做views["items"],那应该会给你一个字典列表,它们都是{'project': 'en.wikipedia', 'article': 'Samuel_John_Carter', 'granularity': 'monthly', 'timestamp': '2019110100', 'access': 'all-access', 'agent': 'user', 'views': 330} 的一般形式。如果您对如何解释它感到困惑,请参阅我对我的其他答案的评论。现在,您会注意到此列表中的许多词典中的每一个都有一个'views' 键和一个'timestamp' 键。你必须决定你想要哪个映射值(即你想要哪个字典) - 我不知道你对哪个感兴趣。如果你想要所有这些,然后遍历这个列表并为每个元素 @987654326 @ 使用i["views"]i["timestamp"] 访问这些字段。这有帮助吗?

【讨论】:

    【解决方案4】:

    感谢您的建议!

    我决定尝试一些不同的东西,直接访问 Wikipedia Rest API。

    下面是我使用的代码:

    import requests
    from csv import reader
    
    opened_file = open("file to read")
    read_file = reader(opened_file)
    unique_pages = list(read_file)
    
    
    write_file = open("file to write results", "w")
    
    
    for row in unique_pages:    
        #first load in variables from file
        lang = row[0]
        page_title = row[1] 
        url = row[2]
        ulan_id = row[3]
        ulan_name = row[4]
        wsearch = row[0]+'.wikipedia'
        #next build URL
        pvurl = 'https://wikimedia.org/api/rest_v1/metrics/pageviews/per-article/'+lang+'.wikipedia/all-access/user/'+page_title+'/monthly/20150701/20191201?'
        #next make request
        response = requests.get(pvurl)
        response_json  = response.json()
        #finally print results
    
        try:
            for i in response_json['items']: 
                _pvarticle = i['article']
                _pvproject = i['project']
                _pvtimestamp = i['timestamp']
                _views = i['views']
                print(_pvarticle,'|',_pvproject,'|',_pvtimestamp,'|',_views,'|',ulan_id,'|',ulan_name,'|',url,'|',lang)
                built_string = f"{_pvarticle}|{_pvproject}|{_pvtimestamp}|{_views}|{ulan_id}|{ulan_name}|{url}\n"
                write_file.write(built_string)
    #            time.sleep(0.005)
        except:
                print(page_title,'|',lang+".wikipedia",'|','No Data','|','No Views','|',ulan_id,'|',ulan_name,'|',url,'|',lang)
                built_string = f"{page_title}|{lang}.wikipedia|No Data|No Data|{ulan_id}|{ulan_name}|{url}\n"
                write_file.write(built_string)
    

    所以,我只是在学习 Python。如果有人有改进代码的建议,请告诉我!

    【讨论】:

      猜你喜欢
      • 2015-11-04
      • 1970-01-01
      • 2018-08-30
      • 2019-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多