欢迎光临散文网 会员登陆 & 注册

自己写一个python脚本将大型json(10G)转为excel文件

2022-05-28 17:53 作者:四块sikuai  | 我要投稿

需求

最近在搭数据库,偶然遇到了这个10G的json,一时间来了兴趣,想导入数据库,目的是将json中指定的value填入excel的指定位置。

【补:因为数据库在本地,没法使用pysql直接导入,只能依赖服务器先处理成excel然后导入数据库,要不然可以省很多事和时间】

【代码在最后】

json格式如下:【总共有三千万行左右】

读取json可以使用python输出前n行

或者使用软件,我是jsonbuddy,打开11G速度还行,没python舒服,不过对于跳转或快速浏览还是比python强,大家自行选择。

jsonbuddy

本文纯属个人手敲,如有错误或有待优化的地方,欢迎大佬指出,谢谢

开始踩坑

首先是,单纯搜索json转excel,抄代码使用read报错,内存不足

然后改为按行读取解决问题。

文件很大,我原本思路是切分文件然后多进程读取,后来还是嫌慢直接放弃,而且拆分后的文件不是完整json,所以没法解析,放弃了这条路。

网上代码都是东抄西抄,我抄到最后一气之下,算了,还是自己写吧!

走上正轨?

因为要将指定value写入excel,所有我这里直接用几个if判断line有没有"a":,并且偷了个懒,最直接曲线救国(哈哈哈),上代码:

【上面的那个i1是存入excel的第i1行,自用小脚本所以变量名随便起的】

懂python的应该不用我多解释中间代码是干啥的,其实就是检测到关键词以后,把不要的内容替换为空,剩下的直接存进excel。

解决openpyxl速度问题

后来再看这篇文章有好多可以改进的地方,这里也可以不用openpyxl解决。

但是这样还是存在问题,我把脚本挂在服务器上跑了一个小时,结果只输出了8000条数据,拿计算器粗略的计算一下,大概要跑200天(而且速度是越来越慢)

所以我在代码最前面加上了判断,我选择检测i1是否能被500整除(json数据量太大,500个数据保存一次虽然会生成几百个文件但是总比长时间运行好,您可以根据自己的数据量进行调整),如果能整除则将文件复制一份并命名为bilibili_1.xlsx,将原xlsx删除然后新建bilibili.xlsx,重新写入数据。

改进后的速度是12分钟8000条,秒杀一开始的一小时8000数据

上代码:

b站的代码块缩减不太好用,原本是写在vscode中的,如有错误还请自行缩进。

【还是那句话,因为脚本自用所以变量是随便起的,比如里面的a就是为了重命名一下文件,请不要过度计较】

到这我差不多就满足了,因为是服务器跑,所以不担心频繁读写等任何操作(其实写这篇文章已经是第二天了,折腾了我一整天的时间,)

最终

上一下代码

emmmm,能跑起来,如果没有第27行的i1 = i1 + 1,那么会死循环复制文件,可能是我的位置不对,不过搞了一天头都大了,能跑起来就行。

差不多就酱,如果帮到了您可以给一个免费的赞吗?感谢。


自己写一个python脚本将大型json(10G)转为excel文件的评论 (共 条)

分享到微博请遵守国家法律