python基础-⽂件读写r和rb区别
⼀、Python⽂件读写的⼏种模式:
r,rb,w,wb 那么在读写⽂件时,有⽆b标识的的主要区别在哪⾥呢?
1、⽂件使⽤⽅式标识
'r':默认值,表⽰从⽂件读取数据。
'w':表⽰要向⽂件写⼊数据,并截断以前的内容
'a':表⽰要向⽂件写⼊数据,添加到当前内容尾部
'r+':表⽰对⽂件进⾏可读写操作(删除以前的所有数据)
'r+a':表⽰对⽂件可进⾏读写操作(添加到当前⽂件尾部)
'b':表⽰要读写⼆进制数据
2、读⽂件进⾏读⽂件操作时,直到读到⽂档结束符(EOF)才算读取到⽂件最后,Python会认为字节\x1A(26)转换成的字符为⽂档结束符(EOF),python怎么读的
故使⽤'r'进⾏读取⼆进制⽂件时,可能会出现⽂档读取不全的现象。
⽰例:
⼆进制⽂件中存在如下从低位向⾼位排列的数据:7F 32 1A 2F 3D 2C 12 2E 76
如果使⽤'r'进⾏读取,则读到第三个字节,即认为⽂件结束。
如果使⽤'rb'按照⼆进制位进⾏读取的,不会将读取的字节转换成字符,从⽽避免了上⾯的错误。
解决⽅案:
⼆进制⽂件就⽤⼆进制⽅法读取'rb'
总结:
使⽤'r'的时候,如果碰到'0x1A',就视为⽂件结束,就是EOF。使⽤'rb'则不存在这个问题,
即:如果你⽤⼆进制写⼊再⽤⽂件读出的话,如果其中存在'0x1A',就只会读出⽂件的⼀部分,
使⽤'rb'会⼀直读取⽂件末尾。
3、写⽂件对于字符串x='abc\ndef',我们可⽤len(x)得到它的长度为7,\n我们称之为换⾏符,实际上是0x0A。当我们⽤'w'即⽂本⽅式写的时候,在windows平台上会⾃动将'0x0A'变成两个字符'0x0D','0x0A',即⽂件长度实际上变成8。当⽤'r'⽂本⽅式读取时,⼜⾃动的转换成原来的换⾏符。如果换成'wb'⼆进制⽅式来写的话,则会保持⼀个字符不变,读取的时候也是原样读取。所以如果⽤⽂本⽅式写⼊,⽤⼆进制⽅式读取的话,就要考虑这多出的⼀个字节了。'0x0D'也称回车符。 Linux下不会变,因为linux只使⽤'0X0A'来表⽰换⾏。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论