Python使用ijson 解析超大json 文件


背景

使用json 模塊解析json需要單次全部載入所有內容,在文件過大時已經不能處理。所以想是否有流式解析json的庫可用
稍微搜索了一下找到了ijson

安裝ijson

ijson 官方介紹
如其他python 庫一樣可直接使用pip 直接安裝 pip install ijson
正如文檔 Backends 中提及的 ijson 提供了幾個版本的解析實現

  • yajl2_c
  • yajl2_cffi
  • yajl2
  • yajl
  • python
    默認應該是python 版本,python版本比較慢,解析一個2G 左右的json 文件 本機需要 27 分鍾
    其中最快的是 yajl2_c yajl 是一個json庫
    windows 上需要手動編譯,使用CMake 構建,很容易編譯
  • 下載 yajl 源代碼解壓 yajl-2.1.0.zip
  • 打開cmake GUI source code 選擇解壓的源代碼文件夾,build the binaries 新建一個build 文件夾
  • 點擊 Configure 選擇Vs版本,其他默認即可
    cmake Configure
  • 點擊Generate 即可生成解決方法,打開解決方案,選擇Release生成解決方案
    build\yajl-2.1.0\lib\Release文件夾中即可找到生成的動態庫
  • 拷貝動態庫到可被PTHA找到的文件夾中
  • 使用pip 安裝 jajl-py pip install yajl-py
    之后就可以 使用了,但是並不能導入yajl2_c
import ijson.backends.yajl2_cffi as ijson

使用yajl2_cffi 確實會比python 版本快一些 同樣的文件 只需要17 分鍾

使用

with open(filePath, 'r') as load_f:
      objects = ijson.items(load_f, 'traceEvents.item',use_float=True)
      for v in objects:
            pass

使用 use_float 選項會將非整數以float 形式返回。這也能讓解析速度更快一些。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM