【问题标题】:How to load only selected objects from a pickle file?如何从泡菜文件中仅加载选定的对象?
【发布时间】:2018-07-22 00:18:41
【问题描述】:

我有多个包含两个列表的泡菜文件。第一个是浮点数的轻量级列表,但第二个是长向量列表,加载时会消耗大量内存。如何仅加载每个泡菜文件中的第一个列表?这是我目前的做法:

import cPickle, bz2    
with bz2.BZ2File(lhl_file, "rb") as pickled_file:
    pickle_object = cPickle.load(pickled_file)
    light_list, \
    heavy_list = list(pickle_object) 

【问题讨论】:

    标签: python memory pickle


    【解决方案1】:

    如果您将两个列表单独腌制到一个腌制文件中,您应该能够轻松地单独加载它们。

    这是我改编自另一个answer 的示例,它涵盖的更全面。

    import pickle
    
    filename = "pickle.dat"
    data1 = 'hello'
    data2 = 'world'
    data3 = 'buddy'
    
    # pickle one object at at time
    f1 = open(filename, "wb")
    pickle.dump(data1, f1)
    pickle.dump(data2, f1)
    pickle.dump(data3, f1)
    f1.close()
    
    # so that you can load them one at at time
    f2 = open(filename, 'rb')
    print pickle.load(f2)
    print pickle.load(f2)
    f2.close()
    

    输出:

    hello
    world
    

    PS:据我所知,在 data1 之前加载 data2 是不可能的。虽然对你来说似乎不是这样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-10
      • 1970-01-01
      • 2014-08-10
      • 1970-01-01
      • 2018-08-04
      • 1970-01-01
      相关资源
      最近更新 更多