在python

时间:2016-09-12 13:27:53

标签: python

我正在编写一个程序来组织我的学校标记,并为每个主题创建了一个file.pck,其中保存了该主题的所有标记。由于我必须打开并pickle.load 10+文件,我决定制作2个函数,files_open():

subj1 = open(subj1_file)
subj1_marks = pickle.load(subj1)
subj2 = open(subj2_file)
subj2marks = pickle.load(subj2)

和file_close():

subj1.close()
subj2.close()

问题是我必须在file_open()中使每个变量都是全局的,而且函数现在太长了。我试图通过调用变量来避免这个问题:

file_open.subj1

但它确实有效,我无法理解为什么。

1 个答案:

答案 0 :(得分:1)

因为你只想打开,加载并关闭文件,我建议一个简单的帮助函数:

def load_marks(filename):
    with open(filename,"rb") as f:  # don't forget to open as binary
         marks = pickle.load(f)
    return marks

像这样使用:

subj1_marks = load_marks(subj1_file)

当文件超出with块的范围时,该文件将被关闭,即使文件已关闭,您的数据仍可访问,这可能是您(不合理)关注您的问题。

注意:有人建议您真正想要的(可能)是将所有数据保存在一个大的pickle文件中。 在这种情况下,您可以创建包含数据的字典:

d = dict()
d["mark1"] = subj1_marks
d["mark2"] = subj2_marks
...

并在字典上执行一个pickle.dump()pickle.load()(如果数据是可选的,那么这个数据的字典也可以选择):处理1个大文件比处理大量文件更简单他们,无论如何都知道你需要所有这些。