溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何用Python合并lmdb文件

發(fā)布時(shí)間:2020-09-13 01:28:28 來源:腳本之家 閱讀:169 作者:SnailTyan 欄目:開發(fā)技術(shù)

由于Caffe使用的存儲(chǔ)圖像的數(shù)據(jù)庫是lmdb,因此有時(shí)候需要對(duì)lmdb文件進(jìn)行操作,本文主要講解如何用Python合并lmdb文件。沒有l(wèi)mdb支持的,需要用pip命令安裝。

pip install lmdb

代碼及注釋如下:

# coding=utf-8
# filename: merge_lmdb.py

import lmdb

# 將兩個(gè)lmdb文件合并成一個(gè)新的lmdb
def merge_lmdb(lmdb1, lmdb2, result_lmdb):

  print 'Merge start!'

  # env代表Environment, txn代表Transaction

  # 打開lmdb文件,讀模式
  env_1 = lmdb.open(lmdb1)
  env_2 = lmdb.open(lmdb2)

  # 創(chuàng)建事務(wù)
  txn_1 = env_1.begin()
  txn_2 = env_2.begin()

  # 打開數(shù)據(jù)庫
  database_1 = txn_1.cursor()
  database_2 = txn_2.cursor()

  # 打開lmdb文件,寫模式,
  env_3 = lmdb.open(result_lmdb, map_size=int(1e12))
  txn_3 = env_3.begin(write=True)

  count = 0
  # 遍歷數(shù)據(jù)庫
  for (key, value) in database_1:
    # 將數(shù)據(jù)放到結(jié)果數(shù)據(jù)庫事務(wù)中
    txn_3.put(key, value)
    count++
    if(count % 1000 == 0):
      # 將數(shù)據(jù)寫入數(shù)據(jù)庫,必須的,否則數(shù)據(jù)不會(huì)寫入到數(shù)據(jù)庫中
      txn_3.commit()
      count = 0
      txn_3 = env_3.begin(write=True)

  if(count % 1000 != 0):
    txn_3.commit()
    count = 0
    txn_3 = env_3.begin(write=True)

  for (key, value) in database_2:
    txn_3.put(key, value)
    if(count % 1000 == 0):
      txn_3.commit()
      count = 0
      txn_3 = env_3.begin(write=True)

  if(count % 1000 != 0):
    txn_3.commit()
    count = 0
    txn_3 = env_3.begin(write=True)

  # 關(guān)閉lmdb
  env_1.close()
  env_2.close()
  env_3.close()

  print 'Merge success!'

  # 輸出結(jié)果lmdb的狀態(tài)信息,可以看到數(shù)據(jù)是否合并成功
  print env_3.stat()

def main():
  fr = open('lmdb.txt')
  # lmdb1的目錄
  lmdb1 = fr.readline().strip()
  # lmdb2的目錄
  lmdb2 = fr.readline().strip()
  # result lmdb的目錄
  result_lmdb = fr.readline().strip()
  fr.close()
  merge_lmdb(lmdb1, lmdb2, result_lmdb)

if __name__ == '__main__':
  main()

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI