加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Python 3读取行内缺少对象的json文件

发布时间:2020-12-20 12:02:04 所属栏目:Python 来源:网络整理
导读:我正在阅读具有以下结构的json文件: [{"id":1,"gender":"Male","first_name":"Andrew","last_name":"Scott","email":"ascott0@shutterfly.com","ville":"Connecticut"},{"id":3,"first_name":"Mary","last_name":"Richards","email":"mrichards2@japanpost.
我正在阅读具有以下结构的json文件:

[{"id":1,"gender":"Male","first_name":"Andrew","last_name":"Scott","email":"ascott0@shutterfly.com","ville":"Connecticut"},{"id":3,"first_name":"Mary","last_name":"Richards","email":"mrichards2@japanpost.jp","ville":"Minnesota"}]

所以,你可以在第二个“行”中看到字段“性别”它不存在.我意识到因为我的代码读取文件在这一行出错了.

我的代码:

import json

def jsonreader():
##Reader for json files
    ##Open files using json library
    with open('cust_data.json') as file:
        data = json.load(file)
    resultlist = list()
    for line in data:
        print(line["id"],line["gender"])

我收到了错误: –

C:/xxxxx/x.py
1 Male
Traceback (most recent call last):
2 Female
File "C:/xxxxx/x",line 67,in <module>
jsonreader()
File "C:/xxxxx/x",line 56,in jsonreader
print(line["id"],line["gender"])
KeyError: 'gender'

在回答之前,你应该知道我有一种方法来定义“性别”中的默认值,瞧我的方法:

def definegender(x):
    if x is None:
        x = 'unknown'
        return x
    elif (x =='Male') or (x=='Female'):#not None:
        return {
         'Male':'M','Female': 'F'
        }.get(x)
    else:
        return x

因此,在这种情况下,我无法使用类似读取值的默认值,因为我需要向我的方法发送一些值.

当你们缺少对象时,你们中的一些人会知道应该如何阅读这种文件的最佳方法.谢谢

解决方法

虽然这已经有了完美的答案,但我的观点是,也可以有替代品.所以这里是:

for line in data:
    try:
        print(line["id"],line["gender"])
    except KeyError:
        print(line["id"],"Error!!! no gender!")

这称为ErrorHandling.阅读文档:
https://docs.python.org/3.6/tutorial/errors.html

更新:你的意思是这个?
update2纠正了错误

try:
    gender = definegender(line["gender"])
except KeyError:
    gender = definegender(None)
print(line["id"],gender)

update3 :(以备将来使用)

as .get()默认情况下返回None,最简单的解决方案是

gender = definegender(line.get("gender"))
print(line["id"],gender)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读