Python json 转换成 Excel 的实现方式
json文档示例如下
我们要将例如:
{“name”:“张三”,“phone”:“12345678901”, “id_card”:“90897832746”}
{“name”:“王五”,“phone”:“23456789012”, “id_card”:“78901234567”}
假设我们有一个.txt文件中有这种数据转化成csv的表格存储像这样:
name | phone | id_card |
---|---|---|
张三 | 12345678901 | 90897832746 |
王五 | 23456789012 | 78901234567 |
通过网上的查找,好像没有找到合适的json的方法或者网站,呐自己试一试看能不能完成这个东西。
经过努力写出了方法如下:(直接拿去就能用,改一下文件的地址)
Python代码
# !/usr/bin/env/python
# coding: utf-8
"""
@File :mismatch_json.py
@auth :sx
@Date :2019/5/16
@Desc :
"""
import numpy as np
import os
import json
import pandas as pd
import logging
def json_to_df(line):
columns = []
values = []
if isinstance(line, tuple):
print(line)
return line
# print("函数中的line{}".format(type(line)))
for k, v in line.items():
if isinstance(v, dict):
# print("v的数据类型{}".format(v))
temp_c, temp_v = json_to_df(v)
columns = columns + [x for x in temp_c]
values = values + [x for x in temp_v]
elif isinstance(v, list):
for var in v:
json_to_df(var)
else:
columns = columns + [k]
values = values + [v]
return columns, values
os.getcwd()
path = 'D:/json.txt'
with open(path, encoding='utf-8') as file:
data = file.readlines()
columns_bin = []
value_bin = []
for line in data:
if line == '\n':
pass
else:
line = line.replace('\n', '')
# 1、读到每一条json数据
df = json.loads(line)
# 2、将json数据解析成 数据框
columns, values = json_to_df(df)
# 3、将返回的数据加到一个新的数据框
columns_bin = columns_bin + [columns]
value_bin = value_bin + [values]
logging.info("找到所有列的名称并集")
# 4、找到所有列的名称并集
col = []
for c in columns_bin:
col = list(set(c + col))
logging.info("创建含有全部列名的打他frame")
# 5、创建含有全部列名的打他frame
df_god = pd.DataFrame(columns=col)
for n, var in enumerate(columns_bin):
dict_god = {}
for m, v in enumerate(var):
print("正在转换第{}各变量名{}".format(m, v))
dict_god.update({v: value_bin[n][m]})
dict_god = pd.DataFrame(dict_god, index=[n])
df_god = df_god.append(dict_god)
logging.info("输出文件")
df_god.to_csv("hahahh.csv")
上面就是我的代码,能将json转成csv保存。