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])+"|")
我正在从数据库中提取数据,其中一列不断有以“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])+"|")