Python 3文件输入以二进制模式更改

时间:2013-07-05 09:49:44

标签: python file python-3.x

在Python 3中,当我打开一个模式字符串为'rb'的文本文件,然后执行了f.read()时,我惊讶地发现字符'b'后用单引号括起来的文件内容。< / p>

在Python 2中,我只获取文件内容。

我确信这是众所周知的,但我在doco中找不到任何关于它的信息。有人能指点我吗?

3 个答案:

答案 0 :(得分:1)

您也可以在Python 3中获得“仅文件内容”。最有可能你可以继续做你正在做的事情。请继续阅读更长的解释:

b''表示结果值是bytes字符串。 bytes - 字符串与普通字符串非常相似,但不完全相同,用于处理二进制非文本数据。

字符串上对二进制数据没有意义的一些方法已经消失,但大多数方法仍然存在。一个很大的区别是,当您从bytes字符串中获取特定字节时,您会得到一个整数,而对于正常str,您会得到一个长度str

>>> b'foo'[1]
111
>>> 'foo'[1]
'o'

如果您使用't'标志以文本模式打开文件,则会返回str。 Python 3 str就是Python 2中的unicode。它用于处理文本数据。

您可以使用bytesstr方法在.encode().decode之间来回转换。

答案 1 :(得分:1)

首先,Python 2 str类型已在Python 3中重命名为bytes,字节文字使用b''前缀。 Python 2 unicode类型是新的Python 3 str类型。

要在Python 2中获取Python 3文件行为,您可以使用io.open()codecs.open(); Python 3默认将文本文件解码为Unicode

你看到的是,对于二进制文件,Python 3为你提供了与Python 2中完全相同的 ,即字节字符串。然后改变的是,字节字符串的repr()b为前缀,print()函数将使用传递给它的任何对象的repr()表示除了unicode值

要使用print()函数将二进制数据打印为unicode文本,请先将其解码为unicode。但是,无论如何,你或许可以将文件作为文本文件打开。

bytes类型有一些其他改进,以反映您正在处理二进制数据,而不是文本。索引单个字节或迭代bytes值可以得到int个值(介于0到255之间),而不是字符,例如。

答案 2 :(得分:0)

有时我们需要(需要?)来了解文本文件是否包含单字符换行符(0A)或双字符换行符(0D0A)。

我们过去通过以二进制模式打开文本文件,识别0D和0A,并将其他字节视为常规文本字符来避免混淆。

可以通过查找所有二进制???模式读取并用新函数oldread()替换它们来移植这些代码,这些函数剥离了添加的材料,但是它有点痛苦。

我认为Python神学家们认为保持'rb'不变,并为新行为添加新的'rx'或其他内容。只是为了取消某些东西似乎有点霸道。

但是,通过在Lennert的文档中搜索“rb”,肯定会回答这个问题。