• python read文件的r和rb的区别


    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 def',我们可用len(x)得到它的长度为7, 我们称之为换行符,实际上是0x0A。当我们用'w'即文本方式写的时候,在windows平台上会自动将'0x0A'变成两个字符'0x0D','0x0A',即文件长度实际上变成8。当用'r'文本方式读取时,又自动的转换成原来的换行符。 如果换成'wb'二进制方式来写的话,则会保持一个字符不变,读取的时候也是原样读取。 所以如果用文本方式写入,用二进制方式读取的话,就要考虑这多出的一个字节了。'0x0D'也称回车符。 Linux下不会变,因为linux只使用'0X0A'来表示换行。

  • 相关阅读:
    TextFlow with JavaFX 2
    搞IT的技术人员为什么会如此苦逼
    Spring MVC3.0.5搭建全程
    JetNuke笔记 ( by quqi99 )
    What is the difference between application server and web server?
    Customize Netbeans Platform Splash Screen and About Dialog
    caffe-win10-cifar10
    Ubuntu14.04+caffe+CPU
    win10+caffe+GPU
    Majority Element(169) && Majority Element II(229)
  • 原文地址:https://www.cnblogs.com/Mysterious/p/9248770.html
Copyright © 2020-2023  润新知