首页 > 解决方案 > 导入/加载几个大 JSON 文件的方法

问题描述

对于 Python3。您将如何处理以下问题?(我在其他帖子中没有找到类似的东西)

我需要打开/加载 72 个不同的 .json 文件并将每个文件分配给一个变量。像这样:

    import json,
with open('/Users/Data/netatmo_20171231_0000.json') as f:
    d1 = json.load(f)
with open('/Users/Data/netatmo_20171231_0010.json') as f:
    d2 = json.load(f)
with open('/Users/Data/netatmo_20171231_0020.json') as f:
    d3 = json.load(f)
with open('/Users/Data/netatmo_20171231_0030.json') as f:
    d4 = json.load(f)    
with open('/Users/Data/netatmo_20171231_0040.json') as f:
    d5 = json.load(f)
with open('/Users/Data/netatmo_20171231_0050.json') as f:
    d6 = json.load(f)
with open('/Users/Data/netatmo_20171231_0100.json') as f:
    d7 = json.load(f)
with open('/Users/Data/netatmo_20171231_0110.json') as f:
    d8 = json.load(f)
with open('/Users/Data/netatmo_20171231_0120.json') as f:
    d9 = json.load(f)
with open('/Users/Data/netatmo_20171231_0130.json') as f:
    d10 = json.load(f)

但我不想(也认为它效率低下)执行 72 次。最后,我将创建一个 pandas 数据框,但首先我需要变量中的 json(s),因为我正在对它们应用一个函数来展平数据(这些 Json 非常嵌套)。

我也尝试成功加入 JSON 文件,但生成的 JSON 为 5GB,我的电脑需要 12 小时才能加载它。(所以这不是一个选项)

谢谢,亲切的问候。

标签: jsonpython-3.ximport

解决方案


首先,找出你的瓶颈在哪里。如果它在 json 解码/编码步骤,请尝试切换到 ultrajson 我还没有测试过,但是你可以改进的一种方法是通过多个进程。

import os
import pandas as pd
from multiprocessing import Pool

# wrap your json importer in a function that can be mapped
def read_json(pos_json):
    return json.load(pos_json)


def main():
    # set up your pool
    pool = Pool(processes=8) # or whatever your hardware can support

    # get a list of file names
    path_to_json = '/Users/Data/'
    file_list = [pos_json for pos_json in os.listdir(path_to_json) if pos_json.endswith('.json')]


    list = pool.map(read_json, file_list)

if __name__ == '__main__':
    main()

推荐阅读