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

自定义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(' ')
       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)
原文地址:https://www.cnblogs.com/he-qing-qing/p/10989351.html