【问题标题】:Pickling lists with their names from Notebook and Unpickling them in Notebook2使用 Notebook 中的名称酸洗列表并在 Notebook2 中取消酸洗它们
【发布时间】:2021-04-14 16:26:24
【问题描述】:

我在 jupyter Notebook (Notebook1) 中有三个变量列表。

conso_emi = ['ENERGYSTARScore', 'SiteEUI(kBtu/sf)', 'SiteEUIWN(kBtu/sf)']
surf = ['PropertyGFAParking', 'LargestPropertyUseTypeGFA']
num_caract = ['NumberofBuildings', 'NumberofFloors', 'Age']

我想在另一个笔记本 (Notebook2) 中重复使用这些变量及其列表。这样做:

尝试 1:我在 Notebook1 中使用了pickler 将它们保存为列表列表: 在笔记本 1 中:

list_lists = [conso_emi,
            surf,
            num_caract,]

with open("Documents/OC/P4/var_funcs", 'wb') as fic:
    mon_pickler = pickle.Pickler(fic)
    mon_pickler.dump(list_lists)

在 Notebook2 中:

with open("Documents/OC/P4/var_funcs", 'rb') as fic:
    mon_depickler = pickle.Unpickler(fic)
    loaded = mon_depickler.load()
loaded

输出:

[['ENERGYSTARScore', 'SiteEUI(kBtu/sf)', 'SiteEUIWN(kBtu/sf)'],
 ['PropertyGFAParking', 'LargestPropertyUseTypeGFA'],
 ['NumberofBuildings', 'NumberofFloors', 'Age']]

这可行,但我丢失了 Notebook1 中的列表名称:conso_emi、surf、num_caracts

尝试 2:我没有保存列表列表,而是将三个列表保存为 dict,其中键是列表(变量)名称,值是列表本身在 Notebook1 中:

dic_lists = {'conso_emi':conso_emi,
            'surf':surf,
            'num_caract':num_caract}

with open("Documents/OC/P4/var_funcs", 'wb') as fic:
    mon_pickler = pickle.Pickler(fic)
    mon_pickler.dump(dic_lists)

在 Notebook2 中:

with open("C:/Users/VP/Documents/OC/P4/var_funcs", 'rb') as fic:
    mon_depickler = pickle.Unpickler(fic)
    loaded = mon_depickler.load()
loaded

输出:

{'conso_emi':['ENERGYSTARScore', 'SiteEUI(kBtu/sf)', 'SiteEUIWN(kBtu/sf)'],
 'surf':['PropertyGFAParking', 'LargestPropertyUseTypeGFA'],
 'num_caract':['NumberofBuildings', 'NumberofFloors', 'Age']}

我当时正在考虑从键和值重新创建变量,但我在之前的帖子中得到了解释,其他帖子表明这不是一个好习惯。 是否有任何适当且快速的方法可以在 Notebook2 中重用或重新创建这三个列表及其名称?

【问题讨论】:

    标签: python jupyter pickle


    【解决方案1】:

    使用第一个并在第二个笔记本中执行conso_emi, surf, num_caract = loaded

    【讨论】:

    • 谢谢曼努埃尔,有没有什么方法可以将笔记本中的名称重复使用到另一个笔记本上,而无需编写它们?如果我的问题不清楚,请告诉我
    • 我会说不是没有糟糕的黑客攻击。无论如何,当您使用它们时,您将它们写在第二个笔记本中。
    • 你能解释一下bad hack是什么意思吗?我不确定我是否理解
    • 使用exec 或写入globals()
    • 我查看了 exec,但我认为会采用您提供的第一个解决方案
    猜你喜欢
    • 2014-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多