python lmdb demo 這接口和BDB一樣惡心啊!


import lmdb

lmdb_img_name = "test.lmdb"
env = lmdb.open(lmdb_img_name, map_size=1e6)

with env.begin(write=True) as txn:
    txn.put("key", "xxxxxxxxxxxxxxxxxx")
    txn.put("key2", "?")
    txn.put("key3", "some value")
    #txn.commit()
env.close()


env = lmdb.open(lmdb_img_name, readonly=True)
with env.begin() as txn:
    print txn.get(b'key')

    cursor = txn.cursor()
    for key, value in cursor:
        print(key, value)

 

更多見:http://blog.csdn.net/ayst123/article/details/44077903,摘錄如下:

 

write

db_img = lmdb.Environment(lmdb_img_name,map_size=int(1e12)) txn_img = db_img.begin(write=True,buffers=True) datum_img = getImgDatum(img_path) txn_img.put(key,datum_img.SerializeToString()) txn_img.commit() db_img.close()

這里,先建立lmdb的instance, db_img。 然后開始txn(可能有很多個開始?)。 put 存放,最后一定注意要commit()。不然根本沒有存進去,檢查下生成的lmdb文件就能看出。最后,close()

這里生成datum是用caffe自帶的函數,做io.py里,叫caffe.io.array_to_datum, 將array變成datum.

Note:

datum存的時候一定要用datum.SerializeToString(), 將它變成string()

分段write

for ind,obj in enumerate(list): if ind%100=0: txn.commit() txn = env.begin(write=True) txn.commit() env.close()

每一次commit 后,需要再定義一次 txn=env.begin(write=True) 
for loop 外面最后再 commit

Read

img_lmdb = imdb.open("name") txn= img_lmdb.begin() cursor = txn.cursor() cursor.iternext() key = cursor.key() value = cursor.value() datum = caffe_pb2.Datum() datum.ParseFromString(value)

Note:

cursor 第一個是空的, iternext()后是第一個值

循環

txn = … 
cursor = txn.cursor() 
for ( idx, (key, value) ) in enumerate(cursor): 
…………….

這就可以循環找了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM