• 文件读写'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\ndef',我们可用len(x)得到它的长度为7,\n我们称之为换行符,实际上是0x0A。当我们用'w'即文本方式写的时候,在windows平台上会自动将'0x0A'变成两个字符'0x0D','0x0A',即文件长度实际上变成8。当用'r'文本方式读取时,又自动的转换成原来的换行符。 如果换成'wb'二进制方式来写的话,则会保持一个字符不变,读取的时候也是原样读取。 所以如果用文本方式写入,用二进制方式读取的话,就要考虑这多出的一个字节了。'0x0D'也称回车符。 Linux下不会变,因为linux只使用'0X0A'来表示换行。
  • 相关阅读:
    x86架构IAM部署
    计划任务的使用
    企业微信集成
    [Vue Route 学习] Vue Route 实现自动tab切导航
    Bootstrap Blazor 组件库 Row 布局组件(栅格系统)
    Blazor 生命周期
    CentOS 7 基本命令
    MSSQL 基础操作
    Bootstrap Blazor Modal 模态框组件
    Bootstrap Blazor 组件介绍
  • 原文地址:https://www.cnblogs.com/lgh1992314/p/5835185.html
Copyright © 2020-2023  润新知