nulige

一、Python文件读写的几种模式:

r,rb,w,wb 那么在读写文件时,有无b标识的的主要区别在哪里呢?

 

1、文件使用方式标识

\'r\':默认值,表示从文件读取数据。
\'w\':表示要向文件写入数据,并截断以前的内容
\'a\':表示要向文件写入数据,添加到当前内容尾部
\'r+\':表示对文件进行可读写操作(删除以前的所有数据)
\'r+a\':表示对文件可进行读写操作(添加到当前文件尾部)
\'b\':表示要读写二进制数据

 

2、读文件 进行读文件操作时,直到读到文档结束符(EOF)才算读取到文件最后,Python会认为字节\x1A(26)转换成的字符为文档结束符(EOF),

      故使用\'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\'来表示换行。

 

分类:

技术点:

相关文章: