从带十六进制字符的字节编码python字符串中仅获取ASCII值

时间:2019-01-31 14:24:56

标签: python-3.x hex ascii decode encode

当我尝试从redshift中的表中获取数据并从中创建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'

我只需要从该字节数据中进行交错。我已经尝试过解码,但是即使执行解码后,结果仍然是字节格式。

2 个答案:

答案 0 :(得分:0)

尝试这样的事情:

fixed_sample = sample.encode('ascii','ignore')

答案 1 :(得分:0)

如果您希望字节串中的所有字节都可以解释为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'