自定义mypickle和myjson类,并通过反射统一接口
# 自己的Myjson
class Myjson(object):
?
def__init__(self, file):
self.file= file
self.obj= Myjson.generator(self.file)
?
def dump(self, obj):
withopen(self.file, mode=‘at‘, encoding=‘utf-8‘) asf:
json.dump(obj, f)
f.write(‘\n‘)
self.obj= Myjson.generator(self.file)
?
@staticmethod
def generator(file):
withopen(file, encoding=‘utf-8‘, mode=‘r‘) asf:
forlineinf:
yieldjson.loads(line.strip())
?
# 返回一个迭代器的实现方式
def load(self):
returnself.obj
?
# 这个实现方式 一次load给一次数据
# def load(self):
# try:
# return next(self.obj)
# except StopIteration:
# pass
# # print(‘文件没有数据了‘)
?
?
# 写一个自己的pickle 类
class Mypickle(object):
def__init__(self, path):
self.file= path
self.obj= self.generator(self.file)
?
def dump(self, object):
withopen(self.file, ‘ab‘) asf:
pickle.dump(object, f)
self.obj= self.generator(self.file)
?
@staticmethod
def generator(file):
withopen(file, ‘rb‘) asf:
while1:
try:
yieldpickle.load(f)
exceptEOFError:
break
?
def load(self):
returnself.obj
?
?
# str是Myjson或Mypickle
def dump(str, obj, path):
try:
cls= getattr(sys.modules[‘__main__‘], str)
cls(path).dump(obj) # Myjson只支持str,bool,null,nums,dic,list6种数据类型
except:
print(‘str must be one of json and pickle:‘)
?
?
# str是Myjson或Mypickle