最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(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ó)家法律
通州市| 兴化市| 绥化市| 白河县| 科尔| 工布江达县| 基隆市| 定西市| 德阳市| 金乡县| 甘洛县| 武城县| 兴安盟| 上杭县| 高阳县| 昂仁县| 江陵县| 抚宁县| 简阳市| 洪泽县| 泽库县| 霍邱县| 巧家县| 福鼎市| 鄄城县| 广河县| 祁门县| 浪卡子县| 福海县| 万年县| 江孜县| 左云县| 宜阳县| 金昌市| 达拉特旗| 谷城县| 鹤庆县| 台中县| 阳曲县| 新昌县| 临清市|