-1

たとえば、私は2つの辞書
を持っています。これは私が試したものです:

def unpickle(filename):
    open = open(filename, "rb")
    Dic1 = cPickle.load(open)
    Dic2 = cPickle.load(open)
    open.close()
    return Dic1,Dict2

しかし、別の関数で unpickle しようとするとエラーが発生します。無効なロード キーと表示されます。

4

1 に答える 1

3

ああ、何が起こっているのかというと、ファイルを 1 回開いて 1 回閉じますが、2 回使用します。独自の unpickle 関数を使用して 2 つのものを作成しようとしたところ、エラーが発生しました。

これは、以前の関数を使用したときに発生するエラーです。

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 4, in pickleLoad
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 1378, in load
    return Unpickler(file).load()
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 858, in load
    dispatch[key](self)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 880, in load_eof
    raise EOFError
EOFError

しかし、そのように編集すると、うまくいきました:

import cPickle
def unpickle(filename):
    open_first = open(filename, "rb")
    Dic1 = cPickle.load(open_first)
    open_again = open(filename, "rb")
    Dic2 = cPickle.load(open_again)
    open_first.close()
    open_again.close()
    return Dic1,Dic2

しかし、引数が 1 つしかないため、関数は 2 つの変数で同じ内容を返します。つまりfilename、ファイルを unpickle するだけです。

def unpickle(filename):
    f = open(filename, "rb")
    d = cPickle.load(f)
    f.close()
    return d
于 2013-05-10T18:39:36.753 に答える