当我尝试从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'
我只需要从该字节数据中进行交错。我已经尝试过解码,但是即使执行解码后,结果仍然是字节格式。
答案 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'