基于python的json脚本解析

1 篇文章 0 订阅

super_json_v0.01 源码和解释

  1. func_super_json(处理Json文件方法)
def func_super_json(js_path,s,tk,vk,c_o):
    '''
    传入json路径:param js_path:
    传入idcard和phone_no:param s:
    传入需要解析的类:param tk:
    传入需要输出的value对应的key,当输入方式为'key,',将key作为单独的一列输出:param vk:
    传入按行输出还是按列输出(0:按行;1:按列):param c_o:
  1. write_txt(将all_data数组中解析好的数据进行保存)
def write_txt(txt_path):
    '''
    传入输出txt路径:param txt_path:
    '''
    with open(txt_path,'w',encoding='utf-8')as f:
        for i in all_data:
            f.write(i + '\n')
  1. GetFileList(获取传入路径下所有文件路径)
def GetFileList(dir, fileList):
    '''

    传入路径:param dir:
    传入数组用于存储路径下的所以文件路径:param fileList:
    返回该路径下所有文件的路径:return:
    '''
  1. all_data[] (用于存储解析好的数据)
  2. super_json_v0.0.1源码
#coding:utf-8

import json
import jsonpath
import os
import time
'''
__author__ == 黄杰
__make_time__ == 2019/3/27
__version__ == 0.0.1
all_data : 用于存储需要输出的所以数据
write_txt : 将数据写入txt文件
GetFileList : 获取输入路径下的所有文件路径
func_super_json : 解析json方法
'''
all_data = []
def func_super_json(js_path,s,tk,vk,c_o):
    '''
    传入json路径:param js_path:
    传入idcard和phone_no:param s:
    传入需要解析的类:param tk:
    传入需要输出的value对应的key,当输入方式为'key,',将key作为单独的一列输出:param vk:
    传入按行输出还是按列输出(0:按行;1:按列):param c_o:
    '''
    data = [] #用于装载需要获取的value
    with open(js_path,'r',encoding='utf-8')as r:
        json_str = r.read() #根据json_path将json数据读取出来type(str)

    json_ = json.loads(json_str) #将str类型的json数据转化为dict类型

    tk_json_ = json_[tk]#将json进行定位

    '''
    获取需要的数据
    
    k : 输入key_list中的数据
    s_k : 用于判断是否需要获取key
    v_l : 用于存储value
    k_l : 用于存储key 仅当有','时启用
    '''
    for k in vk:
        s_k = k.split(',')
        if len(s_k) == 1:
            v_l = jsonpath.jsonpath(tk_json_,'$..%s' % s_k[0])
            data.append(v_l)
        else:
            k_l = []
            v_l = jsonpath.jsonpath(tk_json_, '$..%s' % s_k[0])
            for i in v_l:
                k_l.append(s_k[0])
            data.append(k_l)
            data.append(v_l)

    #===========测试区域==============
    #将数据输出
    # for j in data:
    #     print(j)
    #================================

    '''
    准备将获取到的写入all_data中
    
    strs : 将数据以csv格式存储为str方便后面写入文件
    data_size : 数据长度
    '''
    if c_o == 1:
        data_size = len(data[0])
        for i in range(data_size):
            strs = s
            for j in data:
                strs += str(j[i]).replace(',','') + ','

            all_data.append(strs + str(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))+','+str(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))))
            #输出测试
            # print(strs[:-1])
    else:
        for i in data:
            strs = s
            for j in i:
                strs += str(j).replace(',','') + ','
            all_data.append(strs + str(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))+','+str(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))))
            #输出测试
            # print(strs[:-1])


def write_txt(txt_path):
    '''
    传入输出txt路径:param txt_path:
    '''
    with open(txt_path,'w',encoding='utf-8')as f:
        for i in all_data:
            f.write(i + '\n')


def GetFileList(dir, fileList):
    '''

    传入路径:param dir:
    传入数组用于存储路径下的所以文件路径:param fileList:
    返回该路径下所有文件的路径:return:
    '''
    if os.path.isfile(dir):
        fileList.append(dir)
    elif os.path.isdir(dir):
        for s in os.listdir(dir):
            newDir = os.path.join(dir, s)
            GetFileList(newDir, fileList)
        return fileList




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值