簡體   English   中英

加載腌制數據時cPickle EOFError

[英]cPickle EOFError when loading pickled data

編輯:我很傻

不好意思 我的循環無效的原因是一個非常愚蠢的現象。 我對pickle.dump()的順序有誤。

OP

第一次酸洗對象,如果這是一個小問題,抱歉。 看過其他各種EOFError帖子,但均無作用或似乎不適用。

此外,盡管我關閉了.pkl文件,但在腳本運行后,它的大小始終為零字節。 我不明白為什么。

我在OS X(小牛)上; 這是我的代碼(出於可讀性的考慮,略有減少; to_file_inspections() def是一個類方法,並且使幾個var名稱對普通讀者更有用,否則是逐字記錄FileInspection逐字記錄!

def to_file_inspections(data_store)
    jar = open("jar.pkl","wb")
    for f in data_store:
        f_ob = FileInspection(f) #custom class, not very elaborate
        cPickle.dump(jar,f_ob, -1)
    jar.close()
    #now just to test it...
    data = cPickle.load(open("jar.pkl", "rb"))
    print repr(data)

結果是:

    Traceback (most recent call last):
      File "main.py", line 400, in <module>
        to_file_inspections()
      File "main.py", line 355, in to_file_inspections
        data = cPickle.load(open("jar.pkl", "rb"))
    EOFError

萬一重要,這是我的FileInspection類:

class FileInspection:
    def __init__(self, path):
        self._path = path.rstrip('\n')
        self._hash = self.hash_file()
        self._inspectable = True
        stats = os.stat(self._path)
        self._size = stats.st_size
        self._last_mod = stats.st_mtime

    def hash_file(self):
        read_size = 1024 # You can make this bigger
        checksum = hashlib.md5()
        with open(self._path) as f:
            data = f.read(read_size)
            while data:
                checksum.update(data)
                data = f.read(read_size)
        checksum = checksum.hexdigest()

        return checksum

    def toString(self):
        return '{0} = {1}"checked":false, "path":"{2}", "hash":{3} "inspectable":{4}, "filesize":{5}, "lastmod":"{6}"{7}'.format(
            self._hash, "{", self._path, self._inspectable, self._hash, self._last_mod, "}\n")

    def toJSON(self):
        return '\t"{0}":{1}\n\t\t"checked":false,\n\t\t"path":"{2}",\n\t\t"hash":"{3}",\n\t\t"inspectable":"{4}",\n\t\t"filesize":"{5}",\n\t\t"last_mod":"{6}"\n\t{7}'.format(
            self._hash, "{", self._path, self._hash, self._inspectable, self._size, self._last_mod, "}")

    @property
    def path(self):
        return self._path

    @property
    def hash(self):
        return self._hash

    @property
    def inspectable(self):
        return self._inspectable

    @property
    def size(self):
        return self._size

    @property
    def last_mod(self):
        return self._last_mod

不好意思 我的循環無效的原因是一個非常愚蠢的現象。 我對pickle.dump()的順序有誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM