微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python 3 错误地将“0x0000”字符串转换为十六进制

如何解决Python 3 错误地将“0x0000”字符串转换为十六进制

我正在从数据库提取数据,其中一列始终具有以“0x”开头的十六进制数据。最终目标是简单地将该表中的所有数据写入另一个系统读取的管道分隔文件中。自然,这会触发 Python 认为它是一个十六进制值并尝试对其进行转换。这是我的代码片段。

for row in cur.execute(sql):
    for x in range(len(row)):
                    
                    if(str(row[x]) is None or str(row[x])=='None'):
                        row[x]=""
                    if(len(row)-1==x):
                       
                        f.write(str(row[x]))
                    else:
                        f.write(str(row[x])+"|")

row[x] 可以是整数、字符串、日期时间等。 str() 将其转换为字符串,但是当它遇到包含“0x0000”的单元格时,它会将十六进制转换为 b'\x00\ x00'。我希望该值仅显示“0x0000”。数据以 varbinary 的形式存储在数据库中。

解决方法

看起来好像值可能是 bytes 实例,在这种情况下,您可以通过调用它的 hex 方法将其转换为十六进制数字的字符串,并在结果前加上 '0x' 到获取您想要的字符串表示。

bs = b'\x00\x00'
s = '0x' + bs.hex()  # '0x0000'

您的代码将如下所示:

for row in cur.execute(sql):
    for x in range(len(row)):
                    
        if(str(row[x]) is None or str(row[x])=='None'):
            row[x]=""

        elif isinstance(row[x],bytes):
            row[x] = '0x' + row[x].hex()

        if(len(row)-1==x):       
            f.write(str(row[x]))
        else:
            f.write(str(row[x])+"|")

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。