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

时间:2016-01-27 13:42:30

标签: python file stream binary

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

self.output.write(chr(self.StartElementNew))

但是从Python 3开始,你不能将字符串和字符写入流而不先将它们编码为字节(这对于正确的多字节字符支持是有意义的)

现在有像byte(self.StartElementNew)这样的东西吗?如果可能的话,与Python 2兼容吗?

2 个答案:

答案 0 :(得分:3)

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

chr(self.StartElementNew).encode('ascii')

这不适用于128-255范围内的值,因为在Python 2中,str.encode()调用包含使用ASCII作为编解码器的隐式str.decode(),这将失败。

对于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))

答案 1 :(得分:0)

另一种适用于Python 2和3的替代方法是使用struct

import struct
self.output.write(struct.pack('B', self.StartElementNew))