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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • gateway 鉴权_gateway网关集群

    gateway 鉴权_gateway网关集群前言说起鉴权,大多数会立马想到各种鉴权的技术,比如过滤器、拦截器、安全治理框架shiro、spring-security等等,它们在不同的业务场景下发挥的作用各不相同,但是总体来说都有一个相似的作用,就是作为后端服务的安全防护层而在微服务架构越加流行的时代,网关作为一个独立的组件从众多的服务中拆分出来作为架构的一部分,承载着重大的作用,比如安全拦截,动态路由,负载均衡等,这一点之前的zuul和gateway篇章中都有所交代一个被大家逐渐接受的共识就是,网关从微服务中独立出来作为一个服务进行治理,就不单

    2022年10月11日
    0
  • pycharm2021专业版激活码【最新永久激活】

    (pycharm2021专业版激活码)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~1STL…

    2022年3月27日
    1.1K
  • c语言背包问题(动态规划解法)

    c语言背包问题(动态规划解法)题目描述:有若干个物品要装进背包,并且每个物品有各自的价值,物品的数量、价值以及背包的容量由用户输入,求背包内能够存入的最大价值为多少,并且求出此时放入了哪些物品输入格式:第一行输入物品的容量r和物品个数n第二行输入每个物品的重量第三行输入每个物品的价值输出格式:第一行输出背包中能够存储的最大价值第二行输出此时背包中的物品编号思路分析:可以把这个问题看成是一个二维数组,行是物品编号,列是背包容量,若物品编号为2,背包容量为4,代表的则是当背包容量为..

    2022年7月14日
    15
  • org.apache.hadoop.security.AccessControlException: Permission denied: user=root, access=WRITE, inode

    org.apache.hadoop.security.AccessControlException: Permission denied: user=root, access=WRITE, inode

    2021年5月13日
    140
  • linux smartctl 命令,使用smartctl命令检查磁盘

    linux smartctl 命令,使用smartctl命令检查磁盘使用smartctl命令检查磁盘在TS过程中会碰到很多磁盘异常出现影响系统数据或者生产数据的情况,但是有时候无法判断磁盘出现问题是由于磁盘物理损坏还是磁盘SATA口接触不良导致,这个时候smartctl命令就可以很容易判断出磁盘是否存在物理损坏问题,并且及时作出预警。使用smartctl进行SMART测试所有现代硬盘都可通过SMART属性监视其当前状态。这些值提供有关硬盘各种参数的信息,并可提供有…

    2022年6月16日
    40
  • matlab fprintf函数_matlab绝对值函数

    matlab fprintf函数_matlab绝对值函数matlab中fprintf函数的用法详解:fprintf函数可以将数据按指定格式写入到文本文件中。其调用格式为:数据的格式化输出:fprintf(fid,format,variables)按指定的格式将变量的值输出到屏幕或指定文件,fid为文件句柄,若缺省,则输出到屏幕format用来指定数据输出时采用的格式%d整数%e实数:科学计算法形式%f实数:小数形式%g由系统自动选取上述两种…

    2022年10月19日
    0

发表回复

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

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