国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

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

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

需求

最近在搭數(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),大家自行選擇。

jsonbuddy

本文純屬個(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)的贊嗎?感謝。


自己寫一個(gè)python腳本將大型json(10G)轉(zhuǎn)為excel文件的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
兴义市| 伊川县| 米泉市| 二连浩特市| 栖霞市| 达拉特旗| 新余市| 偃师市| 绥阳县| 乌苏市| 南宫市| 衡山县| 都兰县| 于田县| 秀山| 呼图壁县| 北宁市| 焦作市| 大邑县| 丘北县| 大冶市| 枣阳市| 常山县| 安新县| 丹棱县| 清流县| 扎鲁特旗| 祁东县| 绥德县| 洞口县| 子洲县| 郓城县| 繁峙县| 柳州市| 武强县| 湘阴县| 芦山县| 化德县| 平乡县| 峡江县| 江川县|