【问题标题】:python pickle: dump only unique list to pickled filepython pickle:仅将唯一列表转储到腌制文件
【发布时间】:2015-11-04 14:00:53
【问题描述】:

我有一个函数可以为每个样本生成一个基因名称列表。我想保存这个列表并在其他时候重用它。但是,当转储到pickle文件时,我喜欢先读取pickle文件,并且只选择只转储不在pickle文件中的基因。我不希望我的泡菜文件包含重复的基因列表,因为它会创建一个巨大的泡菜文件。

例如

如果我的腌制文件已经包含以下基因:'a'、'ab'、'ac' 并且我新创建的列表是:

unique_genes_list = ["a", "ab", "ac", "ad"]

然后我只想将“广告”转储到泡菜。有什么好的方法吗?

谢谢

【问题讨论】:

  • 您只想转储一个对象吗?还是每次运行一个新的?换句话说,["a", "ab", "ac"] 会存储在一个对象中,而['ad'] 会存储在另一个对象中吗?
  • ["a", "ab", "ac", "ad"] 将从另一次运行中再次生成,但我不想在那里转储 "a", "ab", "ac因为它们已经存在于泡菜文件中。我只想转储“广告”。
  • 我的回答会将完整的独特基因列表覆盖到文件中。如果您只想存储 ['ad'],我将添加一个编辑...

标签: python list unique pickle dump


【解决方案1】:

如果您的目标是将新基因 'ad' 添加到现有基因列表中,您可以通过以下方法从 pickle 中读取旧数据,添加新基因并重新进行 pickle:

import pickle

unique_genes_list = ["a", "ab", "ac", "ad"]
with open('some/path', 'rb') as in_pickle:
    old_data = pickle.load(in_pickle) ## ["a", "ab", "ac"]

## Adds 'ad' and any other new data
old_data.extend([x for x in unique_genes_list if not x in old_data]) 

## Save the new combined data
with open('some/path', 'wb') as out_pickle: 
    pickle.dump(old_data, out_pickle) ## dumps ["a", "ab", "ac", "ad"] overwriting old pickle

编辑:

如果您希望仅检索唯一性并仅腌制 ['ad'],那么您可以这样做

import pickle

unique_genes_list = ["a", "ab", "ac", "ad"]
with open('some/path', 'rb') as in_pickle:
    old_data = pickle.load(in_pickle) ## ["a", "ab", "ac"]

## Gets just 'ad' or any other unique in a new list
new_genes = [x for x in unique_genes_list if not x in old_data] ##['ad']

## Save the new unique data
with open('some/new/path', 'wb') as out_pickle: 
    pickle.dump(new_genes, out_pickle) ## dumps ["ad"]

【讨论】:

    猜你喜欢
    • 2014-10-17
    • 2015-03-20
    • 2016-11-04
    • 1970-01-01
    • 2014-11-08
    • 2015-12-05
    • 1970-01-01
    • 1970-01-01
    • 2018-10-30
    相关资源
    最近更新 更多