python lmdb_python compile函数

python lmdb_python compile函数使用Python合并lmdb文件

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

文章作者:Tyan
博客:noahsnail.com  |  CSDN  |  简书

由于Caffe使用的存储图像的数据库是lmdb,因此有时候需要对lmdb文件进行操作,本文主要讲解如何用Python合并lmdb文件。没有lmdb支持的,需要用pip命令安装。

pip install lmdb

代码及注释如下:

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

import lmdb

# 将两个lmdb文件合并成一个新的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)

    # 创建事务
    txn_1 = env_1.begin()
    txn_2 = env_2.begin()

    # 打开数据库
    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
    # 遍历数据库
    for (key, value) in database_1:
        # 将数据放到结果数据库事务中
        txn_3.put(key, value)
        count++
        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)

    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)

    # 关闭lmdb
    env_1.close()
    env_2.close()
    env_3.close()

    print 'Merge success!'

    # 输出结果lmdb的状态信息,可以看到数据是否合并成功
    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()
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/187944.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 将 VSCode 快捷键修改为 eclipse的快捷键[通俗易懂]

    将 VSCode 快捷键修改为 eclipse的快捷键[通俗易懂]文章目录1、VSCode中打开`命令面板`,如下图所示。2)在命令面板中输入`keyboard`3)打开`首选项:打开键盘快捷方式(JSON)`4)在`keybindings.json`中配置快捷键配置1(常用的快捷键)配置2(最全的快捷键)1、VSCode中打开命令面板,如下图所示。2)在命令面板中输入keyboard在命令面板中输入keyboard,然后在列表中选择首选项:打开键盘快捷方式(JSON):3)打开首选项:打开键盘快捷方式(JSON)点击

    2022年6月3日
    98
  • vue父组件操作子组件的方法_vue父组件获取子组件数据

    vue父组件操作子组件的方法_vue父组件获取子组件数据父组件和子组件我们经常分不清什么是父组件,什么是子组件。现在来简单总结下:我们将某段代码封装成一个组件,而这个组件又在另一个组件中引入,而引入该封装的组件的文件叫做父组件,被引入的组件叫做子组件。具

    2022年7月29日
    6
  • 关于java代码生成器

    关于java代码生成器讲代码生成器之前先要说说模板,什么叫模板呢,举个例子吧,汇款单都见过吧,你不填写的那些内容都属于模板范畴说到这应该明白了吧,模板就是把共性提取出来反复使用,节约时间、工作量。。。。。那跟代码生成器有什么关系呢,思考一下在编程语言中所有的语言是不是都用共性或者说规范,这些都是固定不变的,在具体点,软件行业也是分主营业务的,比如OA、CRM、ERP、SCM等等,那么各个业务方向的软件

    2022年5月1日
    32
  • php 5.0 与7.0有什么区别

    php 5.0 与7.0有什么区别

    2021年9月25日
    36
  • Petalinux2019.1详细安装[通俗易懂]

    Petalinux2019.1详细安装[通俗易懂]1、首先安装虚拟机,VMware2、安装UBUNTU,ubuntu-18.04.1-desktop-amd64.iso,版本必须是这个,和petalinux-v2019.1-final-installer.run版本对应。3、安装虚拟机完成后,在windos和linux之间建立共享文件夹,使之传输文件更简单。(1)首先取得管理员权限首先输入用户密码然后设置管理员密码123456su…

    2022年9月11日
    0
  • python fabric实现远程操作和部署

    python fabric实现远程操作和部署

    2021年12月6日
    33

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号