【问题标题】:Jsonlines file resulting in KeyError PythonJsonlines 文件导致 KeyError Python
【发布时间】:2019-08-28 07:47:32
【问题描述】:

我有一个 json 文件,我正在加载它以便通过某个名为“sender_id”的键进行过滤。我似乎可以过滤任何其他键,但是在过滤“sende_id”时会导致 KeyError: 'sender_id'

我的python脚本如下:

import json_lines

 with open('specifications.jsonl', 'rb') as f:
    for item in json_lines.reader(f):
    print(item["sender_id"])

我的 jsonlines 文件示例如下:

{"status": "Inactive", "no_of_rejected_submissions": 0, "name": 
 "multi senders 6", "data_type": "acute", "author": "JKS", 
"

【问题讨论】:

    标签: python json python-3.x python-2.7 jsonlines


    【解决方案1】:

    使用get方法获取密钥,避免KeyError异常。

    item.get('sender_id')
    

    如果键存在,它将返回值,否则将返回默认值,在这种情况下为 None。

    你也可以使用,设置默认值,

    item.get('sender_id', 'NA')  # Here default value is NA
    

    【讨论】:

    • 这是有道理的。在循环结束时,我希望能够计算打印了多少条记录。那会在循环之外吗
    【解决方案2】:

    正如您所指出的,第一行没有键 sender_id,因此当您尝试访问不存在的键时,item 对象会吐出 KeyError

    如果将第二行移到第一行,那么它至少会为该行打印出item["sender_id"]的结果(即RAK),然后吐出KeyError

    如果您希望的行为是“如果存在则打印,如果不存在则跳过”,那么您可以dict.get,例如:

    with open('specifications.jsonl', 'rb') as f:
        for item in json_lines.reader(f):
            print(item.get("sender_id")) 
    

    【讨论】:

    • 它似乎没有打印出相同的键值。有某些 sender_id 是发送。输出本质上将被打印到文本文件中
    猜你喜欢
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-13
    • 2020-09-21
    • 1970-01-01
    相关资源
    最近更新 更多