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

时间:2014-08-29 08:42:13

标签: python directory pickle subdirectory temporary-files

我正在考虑一些节省记忆的方法

问题是我为每个项目提供了30个文件,其中包含每个45k行,其中约20个数据被分成包含~100行的某些子部分

在某些代码中,我会将子部分放在数据框中的部分中 然后在将readed和解析数据放入字典的代码的末尾看起来像这样

    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,如果我要解析更多项目,它会消耗太多内存我认为

问题:所以最好使用pickle.dumpy()将每个子目录写入某个tmp文件,然后读取它?

任何人都知道如何做到这一点?我的意思是,我应该把文件的每个子目录或文件的整个目录放到tmp文件中?

问题2:如何稍后阅读所有这些tmp文件并将所有文件放入一个pickle文件中?

afther代码完成所有操作,我把它写入一个大的原始腌制h5文件,并从那里我再次阅读它并放入另一个h5文件,但有一些方案,如:

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

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

其中V22是DataFrame等形式的某些值 (而且这部分代码的时间比制作目录要快得多)

1 个答案:

答案 0 :(得分:0)

将子部分连接成部分并不是一个好主意,尤其是当子部件具有巨大的尺寸时。 尝试单独解析每个文件并将结果附加到单个输出文件中。 这种方法应该更快,并且还允许您避免使用tmp文件。