从带十六进制字符的字节编码 python 字符串中仅获取 ASCII 值
Get only ASCII values from byte-encoded python string with hex characters
当我尝试从 redshift 中的 table 获取数据并从中创建 CSV 文件时,我遇到了字节问题。
b'INTERLEAVED\xff\x01\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00varchar\xff\xff\xff\xff\xff\x00\x00\x00\x00\x04\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
我只需要那个字节数据的交错。我尝试过解码,但即使在执行解码后结果仍然是字节格式。
尝试这样的事情:
fixed_sample = sample.encode('ascii','ignore')
如果您希望字节串中的所有字节都可以解释为 ASCII 可打印字符,您可以使用(假设 bstr
是您的字节串)
newstr = ''.join(chr(b) for b in bstr if 32 <= b < 128)
结果为字符串
'INTERLEAVEDvarchar'
我们收到的字符确实比您预期的要多。如果你真的只想要大写字符,你可以使用
newstr = ''.join(chr(b) for b in bstr if ord('A') <= b < ord('Z'))
或
newstr = ''.join(chr(b) for b in bstr if 'A' <= chr(b) <= 'Z')
或者也许
newstr = ''.join(chr(b) for b in bstr if chr(b) in 'ABCDEFGJIJKLMNOPQRSTUVWXYZ')
其中任何一个都会导致字符串
'INTERLEAVED'
当我尝试从 redshift 中的 table 获取数据并从中创建 CSV 文件时,我遇到了字节问题。
b'INTERLEAVED\xff\x01\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00varchar\xff\xff\xff\xff\xff\x00\x00\x00\x00\x04\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
我只需要那个字节数据的交错。我尝试过解码,但即使在执行解码后结果仍然是字节格式。
尝试这样的事情:
fixed_sample = sample.encode('ascii','ignore')
如果您希望字节串中的所有字节都可以解释为 ASCII 可打印字符,您可以使用(假设 bstr
是您的字节串)
newstr = ''.join(chr(b) for b in bstr if 32 <= b < 128)
结果为字符串
'INTERLEAVEDvarchar'
我们收到的字符确实比您预期的要多。如果你真的只想要大写字符,你可以使用
newstr = ''.join(chr(b) for b in bstr if ord('A') <= b < ord('Z'))
或
newstr = ''.join(chr(b) for b in bstr if 'A' <= chr(b) <= 'Z')
或者也许
newstr = ''.join(chr(b) for b in bstr if chr(b) in 'ABCDEFGJIJKLMNOPQRSTUVWXYZ')
其中任何一个都会导致字符串
'INTERLEAVED'