自己寫一個(gè)python腳本將大型json(10G)轉(zhuǎn)為excel文件

需求
最近在搭數(shù)據(jù)庫(kù),偶然遇到了這個(gè)10G的json,一時(shí)間來(lái)了興趣,想導(dǎo)入數(shù)據(jù)庫(kù),目的是將json中指定的value填入excel的指定位置。
【補(bǔ):因?yàn)閿?shù)據(jù)庫(kù)在本地,沒(méi)法使用pysql直接導(dǎo)入,只能依賴服務(wù)器先處理成excel然后導(dǎo)入數(shù)據(jù)庫(kù),要不然可以省很多事和時(shí)間】
【代碼在最后】
json格式如下:【總共有三千萬(wàn)行左右】
讀取json可以使用python輸出前n行
或者使用軟件,我是jsonbuddy,打開11G速度還行,沒(méi)python舒服,不過(guò)對(duì)于跳轉(zhuǎn)或快速瀏覽還是比python強(qiáng),大家自行選擇。

本文純屬個(gè)人手敲,如有錯(cuò)誤或有待優(yōu)化的地方,歡迎大佬指出,謝謝
開始踩坑
首先是,單純搜索json轉(zhuǎn)excel,抄代碼使用read報(bào)錯(cuò),內(nèi)存不足
然后改為按行讀取解決問(wèn)題。
文件很大,我原本思路是切分文件然后多進(jìn)程讀取,后來(lái)還是嫌慢直接放棄,而且拆分后的文件不是完整json,所以沒(méi)法解析,放棄了這條路。
網(wǎng)上代碼都是東抄西抄,我抄到最后一氣之下,算了,還是自己寫吧!
走上正軌?
因?yàn)橐獙⒅付╲alue寫入excel,所有我這里直接用幾個(gè)if判斷l(xiāng)ine有沒(méi)有"a":,并且偷了個(gè)懶,最直接曲線救國(guó)(哈哈哈),上代碼:
【上面的那個(gè)i1是存入excel的第i1行,自用小腳本所以變量名隨便起的】
懂python的應(yīng)該不用我多解釋中間代碼是干啥的,其實(shí)就是檢測(cè)到關(guān)鍵詞以后,把不要的內(nèi)容替換為空,剩下的直接存進(jìn)excel。
解決openpyxl速度問(wèn)題
后來(lái)再看這篇文章有好多可以改進(jìn)的地方,這里也可以不用openpyxl解決。
但是這樣還是存在問(wèn)題,我把腳本掛在服務(wù)器上跑了一個(gè)小時(shí),結(jié)果只輸出了8000條數(shù)據(jù),拿計(jì)算器粗略的計(jì)算一下,大概要跑200天(而且速度是越來(lái)越慢)
所以我在代碼最前面加上了判斷,我選擇檢測(cè)i1是否能被500整除(json數(shù)據(jù)量太大,500個(gè)數(shù)據(jù)保存一次雖然會(huì)生成幾百個(gè)文件但是總比長(zhǎng)時(shí)間運(yùn)行好,您可以根據(jù)自己的數(shù)據(jù)量進(jìn)行調(diào)整),如果能整除則將文件復(fù)制一份并命名為bilibili_1.xlsx,將原xlsx刪除然后新建bilibili.xlsx,重新寫入數(shù)據(jù)。
改進(jìn)后的速度是12分鐘8000條,秒殺一開始的一小時(shí)8000數(shù)據(jù)
上代碼:
b站的代碼塊縮減不太好用,原本是寫在vscode中的,如有錯(cuò)誤還請(qǐng)自行縮進(jìn)。
【還是那句話,因?yàn)槟_本自用所以變量是隨便起的,比如里面的a就是為了重命名一下文件,請(qǐng)不要過(guò)度計(jì)較】
到這我差不多就滿足了,因?yàn)槭欠?wù)器跑,所以不擔(dān)心頻繁讀寫等任何操作(其實(shí)寫這篇文章已經(jīng)是第二天了,折騰了我一整天的時(shí)間,)
最終
上一下代碼
emmmm,能跑起來(lái),如果沒(méi)有第27行的i1 = i1 + 1,那么會(huì)死循環(huán)復(fù)制文件,可能是我的位置不對(duì),不過(guò)搞了一天頭都大了,能跑起來(lái)就行。
差不多就醬,如果幫到了您可以給一個(gè)免費(fèi)的贊嗎?感謝。