我正在编写一个程序来组织我的学校标记,并为每个主题创建了一个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
但它确实有效,我无法理解为什么。
答案 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个大文件比处理大量文件更简单他们,无论如何都知道你需要所有这些。