json - 导入/加载几个大 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 小时才能加载它。(所以这不是一个选项)
谢谢,亲切的问候。
解决方案
首先,找出你的瓶颈在哪里。如果它在 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()
推荐阅读
- autoit - Autoit - “可能在声明之前使用”和“未声明的全局变量”编译错误
- swift - 使用 Amadeus API 在 SWIFT 中出现“tooManyRequests”错误
- ios - Flutter iOS 模块无法访问新的 Swift 文件并且打印不工作
- c++ - C++ 类上下文中的引用和指针
- app-store-connect - 如何在 App Store Connect 中提交最新版本?
- javascript - 解析时 JSON 输入意外结束
- spring-boot - Java 库或公钥/私钥消息加密
- html - 如何在两个地方共享同一个div
- java - 我没有收到来自静态类的任何格式化数据
- c# - C# WPF 将 RadioSelect 布尔值保存到 XML 文件(它总是错误的)