轻松地将python对象转储到文件中,然后将其加载回。

pickle-warehouse的Python项目详细描述


pickle仓库使保存python变得容易 对象到具有有意义标识符的文件。

如何使用

pickle仓库提供了一个类似字典的对象 与上的特定目录关联的 你的电脑。

from pickle_warehouse import Warehouse
warehouse = Warehouse('/tmp/a-directory')

键对应于文件,并且值得到 腌制到文件。

warehouse['filename'] = range(100)

import pickle
range(100) == pickle.load(open('/tmp/a-directory/filename', 'rb'))

你也可以阅读和删除东西。

# Read
range(100) == warehouse['filename']

# Delete
del(warehouse['filename'])

最酷的部分是钥匙被解释 以一种奇特的方式。除了字符串和类似字符串的对象之外, 您可以使用字符串的iterable;所有这些索引都引用 到文件/tmp/a-directory/foo/bar/baz

warehouse[('foo','bar','baz')]
warehouse[['foo','bar','baz']]

如果你把一个相对路径传递给一个文件,它会像你期望的那样被分解; 也就是说,字符串在斜杠和反斜杠上被拆分。

warehouse['foo/bar/baz']
warehouse['foo\\bar\\baz']

注意:指定绝对路径不会保存仓库目录之外的内容。

warehouse['/foo/bar/baz'] # -> foo, bar, baz
warehouse['C:\\foo\\bar\\baz'] # -> c, foo, bar, baz
                               # (lowercase "c")

如果你传递一个url,它也会以合理的方式被分解。

# /tmp/a-directory/http/thomaslevine.com/!/?foo=bar#baz
warehouse['http://thomaslevine.com/!/?foo=bar#baz']

# /tmp/a-directory/thomaslevine.com/!?foo=bar#baz
warehouse['thomaslevine.com/!?foo=bar#baz']

日期和日期时间转换为YYYY-MM-DD格式。

import datetime

# /tmp/a-directory/2014-02-26
warehouse[datetime.date(2014,2,26)]
warehouse[datetime.datetime(2014,2,26,13,6,42)]

你可以混合这些格式!

# /tmp/a-directory/http/thomaslevine.com/open-data/2014-02-26
warehouse[('http://thomaslevine.com/open-data', datetime.date(2014,2,26))]

它也有典型的字典方法,比如keysvaluesitems, 以及update

何时使用

pickle仓库是用于需要持久存储python对象的情况。 如果你想要一个内存pickle存储,看看 _ pickledb:https://pythonhosted.org/pickleDB/

腌菜仓库绝对比蒙哥好,所以你应该在任何地方使用 你以前使用Mongo的地方。泡菜仓库设计用于 编写需要可伸缩性的繁重工作负载(容易分片),传统的 数据库可靠性(酸)、灵活的模式和高度可配置的索引。

腌菜仓库呈酸性

这就是它是如何做到这一点的。

原子性
写入被重命名的临时文件。
一致性
我不知道这个,但我很确定我有。
隔离
同时写入的处理非常干净。如果在写入过程中发生读取,则会引发错误,您可以重试。
耐久性
所有数据立即保存到磁盘。

Mongo替换功能清单

  • 给fsync打两次电话,确认一下。
  • 读写模式验证(可配置),因为谁知道你昨天做了什么,或者你以后是否改变主意?
  • PID+随机数(+散列?)用于生成随机数
  • inode耗尽

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
相对于框架java窗口的鼠标位置错误   Java 8流peek api   java将数据附加到文件中   java使用ExoPlayer 2.8播放播放列表中的特定文件   JavaSpring国际化:如何动态设置语言环境值   java如何在mysql中实现两个表之间的两个关联   java在gradle可执行jar文件中包含运行时参数   surefire插件中的java maven多套测试套件   java试图理解堆分析以确定内存泄漏或所需的大量内存   java识别字符串有数字   数组如何解决错误“java.lang.ArrayIndexOutOfBoundsException:5”   java Swt文件对话框选择的文件太多?   java此登录代码易受SQL注入攻击吗?   Java[3]中的文件<identifier>预期编译错误   java如何在spring webflux中发送列表   jar中未找到java文件异常   如何在java中合并2D数组?   java如何评测本机JNI库