在以前的 Python 2 程序中,我使用以下行将单个字节写入二进制文件:
self.output.write(chr(self.StartElementNew))
但是从 Python 3 开始,如果不先将字符串和字符编码为字节(这对于适当的多字节字符支持是有意义的),就不能将它们写入流
现在有byte(self.StartElementNew)之类的东西吗?如果可能,与 Python 2 兼容?
最佳答案
对于 0-127 范围内的值,以下行将始终在 Python 2 ( str
) 和 3 ( bytes
) 中生成正确的类型:
chr(self.StartElementNew).encode('ascii')
这不适用于 128-255 范围内的值,因为在 Python 2 中,str.encode()
调用包括隐式 str.decode()
使用 ASCII 作为编解码器,这将失败。
对于 0-255 范围内的字节,我会定义一个单独的函数:
if sys.version_info.major >= 3:
as_byte = lambda value: bytes([value])
else:
as_byte = chr
然后在写入单个字节时使用它:
self.output.write(as_byte(self.StartElementNew))
或者,使用 six
library , 它有一个 six.int2byte()
function ;该库会为您进行 Python 版本测试,以便为您提供合适的函数版本:
self.output.write(six.int2byte(self.StartElementNew))
关于python - 将单个字节写入 python 3.x 中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35038999/