Python 以最快的方式组合许多不使用';我记不起来了

Python 以最快的方式组合许多不使用';我记不起来了,python,json,performance,memory,Python,Json,Performance,Memory,我有大约100000个JSON文件,其结构如下: {'images': [<list of dicts>], 'annotations': [<list of dicts>], 'videos': [<list of dicts>]} 我没有足够的声誉来评论,所以我将把这个作为一个答案留在这里 您不能将这些文件存储在内存中,尽管这对您的pc来说不应该是一个问题,这可能是由于您使用的python对象增加了开销: {'images':[] “注释”:[] “

我有大约100000个JSON文件,其结构如下:

{'images': [<list of dicts>],
 'annotations': [<list of dicts>],
 'videos': [<list of dicts>]}

我没有足够的声誉来评论,所以我将把这个作为一个答案留在这里

您不能将这些文件存储在内存中,尽管这对您的pc来说不应该是一个问题,这可能是由于您使用的python对象增加了开销:

{'images':[]

“注释”:[]

“视频”:[]}


一个想法可能是切换到使用其他东西,如单个字符串(保留正确的JSON结构),或者像这些文章建议的那样使用pandas/numpy:,。

您打算如何处理200 GB的JSON文件?你确定你不想使用数据库吗?我认为JSON最终会达到150GB左右(可能会让我的平均值降低一点)。格式是COCO JSON文件[这将用于训练对象检测深度学习模型。它需要加载到内存中,以防止模型训练中的数据加载瓶颈。@Sylvaus嗨,谢谢你的回答。这是我的第一个想法,但我需要阅读每个json 3x,对吗?我很好奇是否有更快的方法,因为这将花费我大约4小时的时间system.JSON是一种数据传输机制。它应该扩展为系统其他部分所需的任何结构。COCO是否有首选的磁盘格式?然后转换为该格式。有很多格式,如bigtable、parquet等,更紧凑。您使用什么框架来训练对象检测模型?如果是对于这种情况,您应该使用
tf.data.Dataset
。如果使用pytorch,则使用
torch.utils.data.Dataset
。使用这两种方法之一,您不必将整个数据集加载到内存中。
from glob import glob
import json
from tqdm import tqdm

full = {
    'videos': [],
    'images': [],
    'annotations': []
}

for fp in tqdm(glob('coco_parts/*.json')):
    with open(fp, 'r') as f:
        single = json.load(f)
        full['videos'] += single['videos']
        full['images'] += single['images']
        full['annotations'] += single['annotations']