在迭代步骤中保存tempfile以节省内存

2024-06-08 17:10:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我在想一些节省内存的方法

问题是每个项目都有30个文件,每个45k行包含约20个部分的数据,这些数据被分成约100行的子部分

在一些代码中,我将子部分合并到数据帧中的各个部分 最后,将读取和解析的数据放入字典的代码如下所示

    d4={}
    V1=data_inputs
    K1=V1.keys()
    for k1 in K1: #k1 is file number
        d3={}
        V2=V1[k1]
        K2=V2.keys()
        for k2 in K2: #k2 is superpart number
            d2={}
            V21=V2[k2]
            K21=V21.keys()
            for k21 in K21: #k21 is part number
                V22=V21[k21]
                K22=V22.keys()
                for k22 in K22: #k22 is part name
                    V23=V22[k22]
                    [...]
                    d1=SOME_PARSING_FUNCTION(...)
                    d2[k21]={k22:d1}
                d3[k2]=d2
        d4[k1]=d3
    return d4

因此,输出具有以下方案:

{k1:{k2:{k21:{k22:pd.DF or pd.Panel or pd.Panel4D}}}}

代码的输出是

{01:{5:{01:{name1:DF},02:{name2:P},...,15:{name15}},
     8:{01:{name1:DF},02:{name2:P},...,30:{name30}}}
{...}
{30:{5:{01:{name1:DF},02:{name2:P},...,15:{name15}},
     8:{01:{name1:DF},02:{name2:P},...,30:{name30}}}

但它只适用于项目1,如果我要解析更多的项目,我想它会消耗太多内存

问题:那么使用泡菜。矮胖的(),然后读?你知道吗

有人知道怎么做吗?我的意思是,我应该把tmp文件的每个子目录的文件或整个目录的文件?你知道吗

问题2:以后如何读取所有这些tmp文件并将它们放在一个pickle文件中?你知道吗

代码完成后,我将它写入一个大的原始腌制h5文件,然后从那里我再次读取它并将其放入另一个h5文件中,但采用了如下方案:

'/k1/k2/k21/k22/' V22

或者

'/k2/k21/k22/k1/' V22

其中V22是一些数据帧形式的值 (这部分代码比创建目录要快得多)


Tags: 文件数据代码indfforisk2
1条回答
网友
1楼 · 发布于 2024-06-08 17:10:30

将子部分连接成多个部分不是一个好主意,尤其是当子部分的大小很大时。 尝试分别解析每个文件,并将结果附加到单个输出文件中。 这种方法应该更快,并且允许您避免使用tmp文件。你知道吗

相关问题 更多 >