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

Python 3 incorrectly converting "0x0000" string into hex

我正在从数据库中提取数据,其中一列不断有以“0x”开头的十六进制数据。最终目标是简单地将此 table 中的所有数据写入另一个系统读取的竖线分隔文件。自然地,这会触发 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 instance, in which case you can convert it to a string of hex digits by calling it's 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])+"|")