十六进制转字符串

遇见的问题及解决方法:

关于Oracle数据库 blob字段内容导出问题,大家肯定都百度了不少知识,而这一次,我碰到了个新问题,别人给了我一些blob导出的十六进制数据,让我帮忙转化成文本,经过不懈的百度,还是解决了这个问题,特此记录一下,大家有好的办法也可以评论,互相学习。

给大家看下数据哦
在这里插入图片描述
在这里插入图片描述
密密麻麻的恐怖如斯,然后放上我的代码:

在这里插入图片描述

说下思路:
利用xlrd 去访问excel,首先是打开文件 独取对应的表。我们所需要的数据在第三列,起始位置有效位置是第二行

list = table.col(colx=2 , start_rowx=1 , end_rowx=None)

拿到数据以后我们打印一下会发现,有开头是Number的 有的是text,这里我们只需要text的

str(li).startswith('text')

拿到真正需要处理的数据后,就要开始搞事情了,不过有个条件,我们来看下:

def unhexlify(hexstr): # known case of binascii.unhexlify
    """
    Binary data of hexadecimal representation.
    
    hexstr must contain an even number of hex digits (upper or lower case).
    """
    return b""

这里我们看见人家定义的方法,声明需要偶数的十六进制数字,我们得需要进行一点处理,将“0x”去掉。然后保证数值是偶数个,然后进行方法调用。

hex = str(li)[8:-1]
if(len(hex)%2 != 0):
            hex = hex[0:-1]

        txt = binascii.unhexlify(hex)

得到了想要的结果,就只需要进行指定格式保存了,给大家看下效果

在这里插入图片描述
在这里插入图片描述

下面贴出完整代码供大家参考:

import binascii
import xlrd
data = xlrd.open_workbook('病历.xlsx')
table = data.sheets()[0]  #通过索引顺序获取表

list = table.col(colx=2 , start_rowx=1 , end_rowx=None)

#print(len(list))
di = 0

for li in list:
    #print(str(li))
    if(str(li).startswith('text')):

        hex = str(li)[8:-1]

        print(len(hex))   #打印长度
        print(hex) #打印数据

        if(len(hex)%2 != 0):
            hex = hex[0:-1]

        txt = binascii.unhexlify(hex)
        print(txt)

        with open('内容//'+ str(di) +'.xml' , 'wb')as f:
            f.write(txt)
        di = di+1
print("done")
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值