返回介绍

Python 3.0 中的文本和二进制模式

发布于 2024-01-29 22:24:14 字数 1254 浏览 0 评论 0 收藏 0

在Python 2.6中,文本文件和二进制文件之间没有主要区别——都是接受并返回作为str字符串的内容。唯一的主要区别是,在Windows下文本文件自动把\n行末字符和\r\n相互映射,而二进制文件不这么做(这里,为了简单起见,我们把操作连接到了一行之中):

在Python 3.0中,情况稍微复杂一些,因为用于文本数据的str和用于二进制数据的bytes之间存在区别。为了说明这点,让我们写入一个文本文件并在Python中以两种模式来读取它。注意,我们需要为写入提供一个str,但是,根据打开模式,读取给我们一个str或bytes:

注意,在Windows上,文本模式的文件是在输出中如何把\n行末符号转换为\r\n的;在输入上,文本模式把\r\n转换回\n,但二进制模式不会这么做。这在Python 2.6中是一样的,并且,这也是我们希望对二进制数据所做的,尽管如果我们愿意的话,可以在Python 3.0中用额外的open参数控制这一行为。

现在,让我们再次做同样的事情,但是是对二进制文件来做。我们提供一个bytes以便在这个例子中写入,并且根据输入模式,我们仍然得到一个str或一个bytes:

注意,在二进制模式输出中,\n行末字符没有扩展为\r\n——再一次说明,这是二进制数据想要的结果。即便我们要写入二进制文件中的数据本身真的是二进制的,类型需求和文件行为还是相同的。例如,在下面的例子中,"\x00"是二进制0字节并且不是一个可打印的字符:

二进制模式文件总是作为一个bytes对象返回内容,但是接受一个bytes或bytearray对象以供写入。既然bytearray基本上是bytes的一个可变的变体,自然就遵从这一方式。实际上,Python 3.0中的大多数API接受一个bytes,也允许一个bytearray:

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文