Yes, os.DirEntry
对象的目的是短暂的,而不是真正保存或序列化。如果您需要序列化其中的数据,看起来您已经在自己的答案中找到了这一点——序列化(pickle)您需要的属性的字典版本。
反序列化为一个像机器人一样行走和嘎嘎叫的对象os.DirEntry
实例,创建一个PseudoDirEntry
模仿你需要的东西的类。
请注意,您已经可以直接序列化 stat 对象,这样就无需从中选择字段。
结合起来,看起来像这样:
class PseudoDirEntry:
def __init__(self, name, path, is_dir, stat):
self.name = name
self.path = path
self._is_dir = is_dir
self._stat = stat
def is_dir(self):
return self._is_dir
def stat(self):
return self._stat
进而:
>>> import os, pickle
>>> entry = list(os.scandir())[0]
>>> pickled = pickle.dumps({'name': entry.name, 'path': entry.path, 'is_dir': entry.is_dir(), 'stat': entry.stat()})
>>> loaded = pickle.loads(pickled)
>>> pseudo = PseudoDirEntry(loaded['name'], loaded['path'], loaded['is_dir'], loaded['stat'])
>>> pseudo.name
'.DS_Store'
>>> pseudo.is_dir()
False
>>> pseudo.stat()
os.stat_result(st_mode=33188, st_ino=8370294, st_dev=16777220, st_nlink=1, st_uid=502, st_gid=20, st_size=8196, st_atime=1478356967, st_mtime=1477601172, st_ctime=1477601172)