将单个字节写入python 3.x中的文件

gal*_*tte 5 python binary file stream

在先前的Python 2程序中,我使用以下行将单个字节写入二进制文件:

self.output.write(chr(self.StartElementNew))
Run Code Online (Sandbox Code Playgroud)

但是从Python 3开始,您必须先将字符串和char编码为字节,然后才能将其写入流(这对于正确的多字节char支持是有意义的)

现在是否存在诸如byte(self.StartElementNew)之类的东西?如果可能,是否与Python 2兼容?

Mar*_*ers 5

对于 0-127 范围内的值,以下行将始终在 Python 2 ( str) 和 3 ( bytes) 中生成正确的类型:

chr(self.StartElementNew).encode('ascii')
Run Code Online (Sandbox Code Playgroud)

这对于 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
Run Code Online (Sandbox Code Playgroud)

然后在写入单个字节时使用它:

self.output.write(as_byte(self.StartElementNew))
Run Code Online (Sandbox Code Playgroud)

或者,使用six,它有一个six.int2byte()功能;该库为您进行Python版本测试,为您提供合适的函数版本:

self.output.write(six.int2byte(self.StartElementNew))
Run Code Online (Sandbox Code Playgroud)