python使用pickle,json等序列化dict详解编程语言
2023-06-13 09:20:23 时间
PersistentDict从dict继承,实现了持久化。初始化时自动加载文件到内存,关闭时将dict内容序列化到文件,支持csv,json,pickle格式。
import pickle, json, csv, os, shutil class PersistentDict(dict): Persistent dictionary with an API compatible with shelve and anydbm. The dict is kept in memory, so the dictionary operations run as fast as a regular dictionary. Write to disk is delayed until close or sync (similar to gdbms fast mode). Input file format is automatically discovered. Output file format is selectable between pickle, json, and csv. All three serialization formats are backed by fast C implementations. def __init__(self, filename, flag=c, mode=None, format=pickle, *args, **kwds): self.flag = flag # r=readonly, c=create, or n=new self.mode = mode # None or an octal triple like 0644 self.format = format # csv, json, or pickle self.filename = filename if flag != n and os.access(filename, os.R_OK): fileobj = open(filename, rb if format==pickle else r) with fileobj: self.load(fileobj) dict.__init__(self, *args, **kwds) def sync(self): Write dict to disk if self.flag == r: return filename = self.filename tempname = filename + .tmp fileobj = open(tempname, wb if self.format==pickle else w) try: self.dump(fileobj) except Exception: os.remove(tempname) raise finally: fileobj.close() shutil.move(tempname, self.filename) # atomic commit if self.mode is not None: os.chmod(self.filename, self.mode) def close(self): self.sync() def __enter__(self): return self def __exit__(self, *exc_info): self.close() def dump(self, fileobj): if self.format == csv: csv.writer(fileobj).writerows(self.items()) elif self.format == json: json.dump(self, fileobj, separators=(,, :)) elif self.format == pickle: pickle.dump(dict(self), fileobj, 2) else: raise NotImplementedError(Unknown format: + repr(self.format)) def load(self, fileobj): # try formats from most restrictive to least restrictive for loader in (pickle.load, json.load, csv.reader): fileobj.seek(0) try: return self.update(loader(fileobj)) except Exception: pass raise ValueError(File not in a supported format) if __name__ == __main__: import random # Make and use a persistent dictionary with PersistentDict(/tmp/demo.json, c, format=json) as d: print(d, start) d[abc] = 123 d[rand] = random.randrange(10000) print(d, updated) # Show what the file looks like on disk with open(/tmp/demo.json, rb) as f: print(f.read())
原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/8153.html
cjava相关文章
- pycharm自带python环境吗_Python IDE环境之 新版Pycharm安装详细教程[通俗易懂]
- python运行代码不成功_Python | PyCharm无法直接运行(Run)脚本
- Python函数大小的权衡
- 【说站】Python如何实现打字训练的程序
- 【说站】python变量名的查找方法
- python lambda表达式举例_Python中lambda表达式[通俗易懂]
- Python下解析json格式文件
- eval在python中是什么意思_如何在Python中使用eval ?
- 1行Python代码,把PPT转成图片,python-office功能更新~
- Python beautifulsoup4解析 数据提取 基本使用
- Python中类-带括号与不带括号的区别
- 吐槽一下 Python 混乱的 multiprocessing 和 threading
- Python + edge-tts:一行代码,让你的文本轻松变成语音!
- Python Flask项目打包成exe文件
- python多进程编程-多进程编程中的异常处理(一)
- Linux环境下监控目录变化的Python代码片段详解编程语言
- Python编程连接MySQL:从零开始(python与mysql)
- Linux 下 Python 升级:轻松完成升级操作(linux下升级python)
- Oracle 数据库如何利用JSON格式保存信息(json oracle)
- Redis实现高效存储JSON集合(redis集合json)
- python实现代理服务功能实例
- Python列表推导式的使用方法
- JQuery处理json与ajax返回JSON实例代码