`rb`和`r`的区别是什么对于打开一个文件?

Aileen
  • 561

使用open函数打开一个文件,有rb, r的参数:

clipboard.png

请问下:
使用rb打开就是得到二进制数据吗?还是字节数据?字节数据和二进制数据有何区别?
使用r打开就直接是字符串吗?字符串和字节的区别是什么?

回复
阅读 2.7k
4 个回答

使用r:
是推荐使用的打开文本文件的模式。因为使用此模式打开文本文件时,python默认为我们做了一些处理,比如:假设在windows下,将本来应该读入的换行符\r\n处理成\n,方便我们处理。(值得一提的是,当你将\n写入文件时,python也会默认将其替换成\r\n,如果你是win系统的话)
补充:其实是启用了通用换行符支持(UNS),它默认开启。
使用rb:
则python不会对文本文件预处理了,你读入的\r\n依然是\r\n.

rb 是字节流(字节)
r 是string(字符串)

python中默认使用的字符编码是unicode。
字符str与字节bytes是两个概念。
字符串,用于显示。
字节流,用于传输,存储。

例如
s = 'yu123中午'
#s就是一个字符串
sbyte = s.encode()
#sbyte就编码成一个字节流了。  
print(sbyte)
>>> b'yu123\xe4\xb8\xad\xe5\x8d\x88

#字节流,中文显示的是16进制数
s =  sbyte.decode()
#sbyte又解码成字符了
print(s)
>>> 'yu123中午' 

总之,str是能显示的字符,bytes是不能直接显示的数值。 字符encode成字节 字节decode成字符

python3 open

......, Python distinguishes between binary and text I/O. Files opened in binary mode (including 'b' in the mode argument) return contents as bytes objects without any decoding. In text mode (the default, or when 't' is included in the mode argument), the contents of the file are returned as str, the bytes having been first decoded using a platform-dependent encoding or using the specified encoding if given.

字节数据就可以理解为二进制数据
二进制数据是用来存储和传输的,因为计算机只认识010101010

unicode是字符集,我们看到的字符串就是unicode对应的一个个字符

然后又有不同的编码方式 utf-8,gbk,utf-16等等

同一个字符使用不同的编码会得到不同的二进制数据,这就是常见的编码乱码

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏