Abh*_*bhi 22 python persistence object-persistence
我有4亿行独特的键值信息,我希望能够在脚本中快速查找.我想知道这样做的方式是什么.我确实考虑了以下但不确定是否有一种磁盘映射字典的方法,并且除了在字典创建期间没有使用大量内存.
如果有任何不清楚的地方,请告诉我.
谢谢!-Abhi
mha*_*wke 12
原则上,搁架模块完全符合您的要求.它提供了由数据库文件支持的持久字典.键必须是字符串,但搁置将处理酸洗/去除值.db文件的类型可以有所不同,但它可以是Berkeley DB哈希,这是一个非常轻量级的键值数据库.
您的数据大小听起来很大,因此您必须进行一些测试,但搁置/ BDB可能取决于它.
注意:不推荐使用bsddb模块.可能搁置将来不会支持BDB哈希.
Tim*_*man 10
没人提到dbm.它像文件一样打开,表现得像字典,属于标准发行版.
来自文档http://docs.python.org/release/3.0.1/library/dbm.html
import dbm
# Open database, creating it if necessary.
db = dbm.open('cache', 'c')
# Record some values
db[b'hello'] = b'there'
db['www.python.org'] = 'Python Website'
db['www.cnn.com'] = 'Cable News Network'
# Note that the keys are considered bytes now.
assert db[b'www.python.org'] == b'Python Website'
# Notice how the value is now in bytes.
assert db['www.cnn.com'] == b'Cable News Network'
# Loop through contents. Other dictionary methods
# such as .keys(), .values() also work.
for k, v in db.iteritems():
print(k, '\t', v)
# Storing a non-string key or value will raise an exception (most
# likely a TypeError).
db['www.yahoo.com'] = 4
# Close when done.
db.close()
Run Code Online (Sandbox Code Playgroud)
我会在任何更奇特的形式之前尝试这个,并且使用搁架/泡菜将在装载时将所有内容拉入内存.
干杯
蒂姆
毫无疑问(在我看来),如果你想要坚持下去,那么Redis是一个很好的选择.
import redis
ds = redis.Redis(host="localhost", port=6379)
with open("your_text_file.txt") as fh:
for line in fh:
line = line.strip()
k, _, v = line.partition("=")
ds.set(k, v)
Run Code Online (Sandbox Code Playgroud)
上面假设一个值为的文件:
key1=value1
key2=value2
etc=etc
Run Code Online (Sandbox Code Playgroud)
根据需要修改插入脚本.
import redis
ds = redis.Redis(host="localhost", port=6379)
# Do your code that needs to do look ups of keys:
for mykey in special_key_list:
val = ds.get(mykey)
Run Code Online (Sandbox Code Playgroud)
为什么我喜欢Redis.
| 归档时间: |
|
| 查看次数: |
8757 次 |
| 最近记录: |