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兼容?
对于 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)
| 归档时间: |
|
| 查看次数: |
1457 次 |
| 最近记录: |