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

标签 python file stream binary

在以前的 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/

相关文章:

iphone - 如何从 iPhone 向 Windows 发送消息?

python - django userprofile嵌套关系在django REST中为空

python - 如何在每次 while 循环通过时创建一个新数组

python - 从给定 URL 下载文件并使用 Google Colab 保存文件时出现问题

php - 如何将项目添加到json文件格式的数组

c# - 通过 StreamWriter 或文件写入修改数据?

python - 正则表达式将字符串分割成相同的 block

python - 在 Django 管理命令中读取文件

c# - 如何在 C# 中关闭该文件进程后删除文件

java - 第二次调用时 JSch 不提供输出