将json文件转换为xls格式

对于数据分析人员来说,很多时候csv和xls格式的文件会更方面很多,但json格式作为网络数据传输通用格式,很多格式是以json格式保存,包括scrapy和pyspider等都是提供了默认的json格式,因此在很多场合需要将json格式转换为xls格式,笔者自己写了个转换脚本:

def get_data_from_dict(data, result):
    #如果key不存在,则设置为空
    for key in data:
        if key not in result:
            #如果一个key都不存在着直接加入一个key,否则选择第一个key的长度
            if not result.keys():
                result[key] = []
            else:
                result[key] = len(result[result.keys()[0]])*[""]
    #然后分别加入值
    for key in result:
        if key in data:
            result[key].append(data[key])
        else:
            result[key].append("")
    return result

def get_all_child(father_dict, spread_dict=None):
    '''将所有dict展开'''
    if spread_dict == None:
        spread_dict = {}
    for key in father_dict:
        if isinstance(father_dict[key], dict):
            spread_dict = get_all_child(father_dict[key], spread_dict)
        else:
            spread_dict[key] = father_dict[key]
    return spread_dict

通过json.load我们可以将json文件转换为python中的字典格式,因此处理json文件对于python来说其实就是对字典的处理,这里主要构建了两个函数,get_all_child()是用来将展开字典逐级展开,get_data_from_dict()则负责将字典的组合成pandas中的DataFrame样式格式,以一份安居客的json文件为例,可以关注我的github,附带送上数据,完整的代码如下:

#coding:utf8
import json
import six
import pandas as pd
from collections import defaultdict

def get_data_from_dict(data, result=None):
    #如果key不存在,则设置为空
    for key in data:
        if key not in result:
            #如果一个key都不存在着直接加入一个key,否则选择第一个key的长度
            if not result.keys():
                result[key] = []
            else:
                result[key] = len(result[result.keys()[0]])*[""]
    #然后分别加入值
    for key in result:
        if key in data:
            result[key].append(data[key])
        else:
            result[key].append("")
    return result

def get_all_child(father_dict, spread_dict=None):
    '''将所有dict展开'''
    if spread_dict == None:
        spread_dict = {}
    for key in father_dict:
        if isinstance(father_dict[key], dict):
            spread_dict = get_all_child(father_dict[key], spread_dict)
        else:
            spread_dict[key] = father_dict[key]
    return spread_dict

filename = u"安居客新房.json"
with open(filename,"r") as fr:
    result = defaultdict(list)
    for line in fr:
        linedata = json.loads(line)
        spread_data = get_all_child(linedata)
        result = get_data_from_dict(spread_data, result)
    data = pd.DataFrame(result)
    data.to_excel(u"安居客.xls",encoding="utf8")

---------------------END----WRITE----AT----http://my.oschina.net/Kanonpy/---------------------------

转载于:https://my.oschina.net/Kanonpy/blog/689963

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值