JSON格式的文件转csv

article/2025/4/24 21:51:43

这里处理的json文件没有后缀名,下面是处理之前的文件内容
处理前的JSON文件
处理之后的csv文件其实就是正常的excel文件,不一样的是有乱码,因为脚本里面使用的是utf-8编码,这里给出乱码解决方案
使用记事本打开csv,然后另存为选择编码格式为ANSI,之后再打开就是正常的了。有问题可以问我,代码有待完善

#!/usr/bin/env python
# coding=utf-8
#先把数据整合到该目录下面的txt文件,然后对该txt文件操作
import re, os, json#文件路径处理函数
def path_rotate(base_dir,name):path_list=base_dir.split("\\")#处理批量存放json文件的路径import_file_path=''data_export_path_=''i=1for path in path_list:import_file_path=import_file_path+path+'\\\\'i=i+1#数据 导出路径,按照这种标准写data_export_path = 'C:\\数据导出'#创建数据导出文件if not os.path.exists(data_export_path):os.mkdir(data_export_path)#处理整合完成的文件,并且接下来的数据都从这里面处理import_export_file_path=data_export_path+'\\'+name+'_原始数据整合.txt'#处理完成之后的sql文件import_export_sql_file_path = data_export_path + '\\\\'+name + '_sql.txt'export_file_path = data_export_path + '\\\\'+name + '.csv'#顺序是存储json文件的路径,整合json文件的路径,json文件处理好之后的路径,数据表生成sql语句路径print(import_file_path,import_export_file_path,export_file_path,import_export_sql_file_path)return import_file_path,import_export_file_path,export_file_path,import_export_sql_file_path
#所有的读函数
def read_file(path):with open((os.path.join(path)), 'r', encoding='utf-8') as f:data=f.read()return data
#所有的追加函数
def write_a(path,data):with open((os.path.join(path)), 'a+', encoding='utf-8') as f_:f_.write(data)
#整合所有的json文件
def union_json_to_txt(fileList,import_export_file_path):for i in fileList:print('file_name',i)data3=read_file(i)write_a(import_export_file_path,data3)
#获取字典的头几个键
def get_head_key(data):# print('data:',data)head_key_lists = []for key,value in data.items():#如果value的值是字典# print('key:',key,'value:',value)if not isinstance(value,dict):head_key_lists.append(key)else:for key_,value_ in value.items():head_key_lists.append(key_)return head_key_lists
#获取表的列名
def get_key_value(data):# print('data:',data)key_lists = []for key,value in data.items():#如果value的值是字典# print('key:',key,'value:',value)if isinstance(value,dict):for key_,value_ in value.items():if isinstance(value_, list):data_list = value_[0]# print('列表:', data_list, type(data_list))for key__, value__ in data_list.items():key_lists.append(key__)# print('key的列表', key_lists)return key_lists
#获取键值
def get_dict_list(data):# print('data:',data)key_lists = []for key,value in data.items():#如果value的值是字典# print('key:',key,'value:',value)if isinstance(value,dict):for key_,value_ in value.items():if isinstance(value_, list):return value_
#生成数据库sql命令的函数
def create_sql(path,name,column_list):print(column_list)sql_list=[]sql_list.append('SET NAMES utf8mb4;')sql_list.append('SET FOREIGN_KEY_CHECKS = 0;')sql_list.append('DROP TABLE IF EXISTS `'+name+'`;')sql_list.append('CREATE TABLE `'+name+'`  (')sql_list.append('`number` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,')i=1print('字段数:',len(column_list))for column in column_list:if i == len(column_list):sql_list.append('`'+column+'` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL')i=i+1else:sql_list.append('`'+column+'` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,')i=i+1sql_list.append(') ENGINE = MyISAM CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC;')sql_list.append('SET FOREIGN_KEY_CHECKS = 1;')sql_str=''for sql_string in sql_list:sql_str=sql_str+sql_string+'\n'with open(path, "a+", encoding='utf-8') as f:f.write(sql_str + "\n")print(sql_list)
def format(data_list):string = ''for data in data_list:string=string+','+datareturn 'number' + string
#获取文件夹内所有文件路径
def recursion_dir_all_file(path):print(path)''':param path: 文件夹目录'''file_list = []for dir_path, dirs, files in os.walk(path):for file in files:file_path = os.path.join(dir_path, file)# if "\\" in file_path:#     file_path = file_path.replace('\\', '/')file_list.append(file_path)for file in file_list:if file.endswith('.mp4') | file.endswith('.txt') | file.endswith('.csv'):file_list.remove(file)return file_listpath_and_name={#导出数据的表名和路径#注意,这个根路径不能带数字!!!!千万注意不要出现’\‘后面跟了数字如:\9'会员管理1':'D:\wudi文件夹\大理案件-78\案件78大理\交付数据2\交付数据\客户管理\会员管理','银行管理1':'D:\wudi文件夹\大理案件-78\案件78大理\交付数据2\交付数据\客户管理\银行管理','充值记录1':'D:\wudi文件夹\大理案件-78\案件78大理\交付数据2\交付数据\交易记录查询\充值记录','提现记录1':'D:\wudi文件夹\大理案件-78\案件78大理\交付数据2\交付数据\交易记录查询\提现记录','存款记录1':'D:\wudi文件夹\大理案件-78\案件78大理\交付数据2\交付数据\人工存提\人工存款记录'
}
#
# name=input("请输入本次处理的数据名:")
# #获取表格字段值文件位置'E:\\案件相关\\大理\\交付数据\\客户管理\\all.txt'
# #注意,这个根路径不能带数字!!!!千万注意
# base_dir = 'E:\案件相关\大理\数据处理\数据处理最新\客户管理\会员管理'
# 顺序是存储json文件的路径,整合json文件的路径,json文件处理好之后的路径,数据表生成sql语句路径
for key,value in path_and_name.items():name=keybase_dir=valueimport_file_path,import_export_file_path,export_file_path,export_sql_file_path=path_rotate(base_dir,name)print(import_file_path,import_export_file_path,export_file_path,export_sql_file_path)#获取所有的文件名file_list=recursion_dir_all_file(import_file_path)#整合所有的json文件union_json_to_txt(file_list,import_export_file_path)data2=read_file(import_export_file_path)# 以换行分割所有字符串,返回列表data2 = data2.split("\n")key_list = []#获取列表头for data in data2:if "msg" in data:data_tmp = data.replace("HTTP/1.1 200 ", "")data_tmp_json = json.loads(data_tmp)#表文件的列名key_list = get_key_value(data_tmp_json)break#调用函数生成数据库表生成字段# create_sql(export_sql_file_path,name,key_list)#写入文件的标题头write_a(export_file_path,format(key_list))#获取一行写入数据number=0for data in data2:#循环依据,目前不确定要不要改动,或者写id,要根据情况看if "userId" in data:data_tmp=data.replace("HTTP/1.1 200 ","")data_tmp_json=json.loads(data_tmp)head_key_list=get_head_key(data_tmp_json)print('head_key_list',head_key_list)#如果这个表示数据的是rows#存储键值list_data_value=[]string_1=''if 'rows' in head_key_list:#如果数据的键是resulttmp1=data_tmp_json.get("data",{})tmp2 = tmp1.get("rows", {})# tmp3 = tmp2.get("list", {})for tmp in tmp2:#这里不用写id,因为id是自己设置的,有时候自己带id,那么就不需要这个字段了for key in key_list:#循环获取这些数据#print('key:',key,'value:',tmp.get(key))if not isinstance(tmp.get(key),str):if isinstance(tmp.get(key), dict):#这里给字段值中的json数据设置成了nonestring_1=string_1+','+'None'tmp.pop(key)else:string_1 = string_1 + ',' + str(tmp.pop(key))else:if isinstance(tmp.get(key), dict):# 这里给字段值中的json数据设置成了nonestring_1 = string_1 + ',' + 'None'tmp.pop(key)else:string_1 = string_1 + ',' + str(tmp.pop(key))#写入表格的字段值data_string_list_value=str(number)+string_1number+=1print('写入表格的字段值',data_string_list_value)with open(export_file_path, "a+", encoding='utf-8') as f:f.write(data_string_list_value + "\n")string_1=''data_string_list_value=''else:#如果数据的键是resulttmp1=data_tmp_json.get("data",{})tmp2 = tmp1.get("result", {})# tmp3 = tmp2.get("list", {})for tmp in tmp2:#这里不用写id,因为id是自己设置的,有时候自己带id,那么就不需要这个字段了for key in key_list:#循环获取这些数据#print('key:',key,'value:',tmp.get(key))if not isinstance(tmp.get(key),str):if isinstance(tmp.get(key), dict):string_1=string_1+','+'None'tmp.pop(key)else:string_1 = string_1 + ',' + str(tmp.pop(key))else:if isinstance(tmp.get(key), dict):string_1 = string_1 + ',' + 'None'tmp.pop(key)else:string_1 = string_1 + ',' + str(tmp.pop(key))#写入表格的字段值data_string_list_value=str(number)+string_1number+=1print('写入表格的字段值',data_string_list_value)with open(export_file_path, "a+", encoding='utf-8') as f:f.write(data_string_list_value + "\n")string_1=''data_string_list_value=''if os.path.exists(import_export_file_path):os.remove(import_export_file_path)

http://chatgpt.dhexx.cn/article/cbqZ7Tx9.shtml

相关文章

【Python小程序】第3讲:如何将json数据转换成csv格式?

机器学习训练营——机器学习爱好者的自由交流空间(入群联系qq:2279055353) JSON介绍 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,方便人们阅读和编写。任何支持的数据类型都可以通过json来表示,例如…

UML 包图

概述 包图是 UML 一种用以显示包和包之间的依赖关系的结构性图表。 包图是一种结构图,显示了中大型项目中模型元素的排列和组织。包图可以显示子系统或模块之间的结构和依赖性,并显示系统的不同视图。 目的 包图图用于构造高级系统元素。软件包用于组织…

(转载)UML各种图总结

UML(Unified Modeling Language)是一种统一建模语言,为面向对象开发系统的产品进行说明、可视化、和编制文档的一种标准语言。下面将对UML的九种图包图的基本概念进行介绍以及各个图的使用场景。 一、基本概念   如下图所示,UM…

【UML】------图

一、引言 在上一篇博客中给大家介绍了UML中的视图,在结尾的时候根据自己的理解有把图和视图之间的包含关系总结了一下,那么在这篇博客中我将结合实例来介绍UML中的图。 二、基本内容 1、用例图(Use Case Diagram) (1&a…

[跟我学UML] UML包图中的包引入和包合并

缩略语 UIS UML Infrastructure Specification UML基础结构规范 UML Unifed Modeling Language 统一建模语言 USS UML Superstructure Specification UML上层结构规范 参考资料 《UML Infrastructure Specification, v2.2》 《UML Superstructure Spec…

[完全免费] 在线UML Package Diagram 包图工具 - 教程第4部分

封装图显示了中型到大型项目中模型元素的布置和组织,可用于显示子系统或模块之间的结构和相关性。 (一键即时打开使用) 什么是UML中的包图? 大系统提供特殊挑战。为大型系统绘制班级模型,而且它太大而难以理解。类之间有太多的联系要理解。处…

UML总结—包图(Package Diagram)

一、什么是包 在面向对象的软件开发过程中,类显然是构建整个系统的基本构造块。但是对于庞大的应用系统而言,包含的类是成百上千的,再加上其间“阡陌纵横”的关联关系,多重性等,必然大大超出了人们可以处理的复杂度。…

UML- 包图

前言 感觉包图萌萌哒,不知道你们是什么样的感觉呢~ 正文 what 1、包图是由包和包之间的关系构成的。 2、逻辑上把复杂的图模块化。 who 阶段:可行性分析,概要设计。 作用 1、维护和控制系统总体结构的重要建模工具。 元素 类、接口…

UML之包图(Package Diagram)

前言 包图,一个包字就体现出了它的包容性一定是非强大,在具体了解之后,感觉包图真是如此。 正文 概念 一个”包图”可以是任何一种的UML图组成,通常是UML用例图或UML类图。 包是一个UML结构,它使得你能够把诸如用例…

写在MyUML发布090515_2版之际

前段时间针对一些问题,做了一次校正。本来准备等待我的代码生成引擎写好后一并发布的,但是我想,要完善代码生成引擎需要一段不短的时间(我自己也估计不出来),所以昨天将更正后的版本发布了。 对软件添加的内…

【UML学习】--包图

【前言】 包图是怎么来的? 在面向对象开发的概念里,类是构造整个系统的基本构造块。但是一个庞大的系统中包含的类是成百上千个的,而且这些类之间的关系也是阡陌交错,所以处理起来十分复杂,这时候就引入了“包”这个概…

UML—Package Diagram

随着程序软件越来越复杂,一个程序往往包含了数百个类。管理这些类的有效方法就是将类进行分组,将功能相似或相关的类组织在一起。包图是一种维护和描述系统总体结构模型的重要建模工具 包的构成: 1.包的名称 2.包的元素 包自身所拥有的元素…

【UML】9种图+包图

导读:在UML的学习中,介绍了9种图,外加一个包图。这9种图和4大关系,可以说是UML的一个核心内容。我根据自己的笔记,以及查阅的一些资料,对这9种图和包图,做一个总结。 一、基本定义 1、1 总体…

MyUML Features myeclipse 中的 MYUML 的功能

MyUML Features myeclipse 中的 MYUML 的功能7 UML Diagrams: 7种图表 Use-case diagram 用况图 Class diagram 类图 Sequence diagram 顺序图 Collaboration diagram 协作图 State diagram 状态图 Activity diagram 行为图 Deployment diagram 配置图Integrated Diagram Edit…

MyUML Designer开源项目(支持UML2.2规范)第一版本即将发布

经过努力, MyUML Designer开源项目第一版本即将发布. 计划在本月发布第一个版本. MyUML Designer基于Eclipse 3.5开发, 完全实现UML2.2规范. 先贴几个截图, 本版本尽量使图形简洁和漂亮. 后续工作还在进行中. MyUML Designer Project: http://myumldesigner.googlecode.com M…

UML——包图

一、包图的含义 包图(Package Diagram)由包和包之间的关系构成,对维护和控制系统总体结构很重要。系统建模中,有大量的类、接口、组件、节点和图,有必要将这些元素进行分组,把语义相近并倾向一起变化的元素…

UML图详解(九)包图

一、概述 维护和控制系统总体结构的重要建模工具方便理解和处理整个模型设计良好的包是高内聚、低耦合的,并对其内容的访问具有严密的控制 包的内容:拥有或引用的模型元素。包的实例没有任何语义。 仅在建模时有意义,而不必转换到可执行的系…

UML包图

UML包图 基本概述 包图(Package Diagram)是UML中的组织图形,其能有效的组织好各种UML图和表达思路,其功能是组织包内元素,控制访问。 基本语法 解释: 1、包有包的名字和包之间的关系。 2、包之间的关系有三种: 1、包…

UML 之 包图

包图(Package Diagram) 包图可以是任何一种的UML图组成,通常是UML用例图或UML类图。 包是一个UML结构,它使得你能够把诸如用例或类之类模型元件组织为组。 包被描述成文件夹,可以应用在任何一种UML图上。 虽然…

UML-包图

一、什么是包图 包图是在 UML 中用类似于文件夹的符号表示的模型元素的组合。系统中的每个元素都只能为一个包所有,一个包可嵌套在另一个包中。使用包图可以将相关元素归入一个系统。一个包中可包含附属包、图表或单个元素。 一个"包图"可以是任何一种的U…