码迷,mamicode.com
首页 > Web开发 > 详细

实现自己mypickle 和 myjson类 并通过反射,实现接口统一

时间:2019-06-07 22:59:59      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:icm   int   tin   cme   att   except   eof   pickle   modules   

自定义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
def load(Cls, path):
       try:
           cls= getattr(sys.modules[‘__main__‘], Cls)
           returncls(path).load()   # Myjson只支持str,bool,null,nums,dic,list6种数据类型
       except:
           print(‘str must be one of json and pickle:‘)
?
?
# dump(‘Myjson‘, [1, 2], ‘test_txt‘)
# for db in load(‘Myjson‘, ‘test_txt‘):
#     print(db)
?
# dump(‘Myjson‘, [1, 2], ‘test_txt_mypickle‘)
# for db in load(‘Myjson‘, ‘test_txt_mypickle‘):
#     print(db)

实现自己mypickle 和 myjson类 并通过反射,实现接口统一

标签:icm   int   tin   cme   att   except   eof   pickle   modules   

原文地址:https://www.cnblogs.com/he-qing-qing/p/10989351.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!