2012年08月22日 ⁄ 综合 ⁄ 共 849字 ⁄ 字号 小 中 大 ⁄ 评论关闭
不管何种语言在进行文件读写时,大家都知道有以下模式:

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'来表示换行。

原文:http://www.xuebuyuan.com/367184.html

转载于:https://www.cnblogs.com/fmgao-technology/p/9054856.html

文件读写’r'和’rb’区别相关推荐

  1. python3 文件读写 r 和 rb 区别

    python文件读写的几种模式: r,rb,w,wb 那么在读写文件时,有无b标识的的主要区别在哪里呢? 1.文件使用方式标识 'r':默认值,表示从文件读取数据. 'w':表示要向文件写入数据,并截 ...

  2. python文件读写_python基础-文件读写'r' 和 'rb'区别

    一.Python文件读写的几种模式: r,rb,w,wb 那么在读写文件时,有无b标识的的主要区别在哪里呢? 1.文件使用方式标识 'r':默认值,表示从文件读取数据. 'w':表示要向文件写入数据, ...

  3. 文件读写'r'和'rb'区别

    不管何种语言在进行文件读写时,大家都知道有以下模式: r,rb,w,wb 那么在读写文件时,有无b标识的的主要区别在哪里呢? 1.文件使用方式标识 'r':默认值,表示从文件读取数据. 'w':表示要 ...

  4. python文件读写r+_python文件读写操作(r/r+/rb/w/w+/wb/a/a+/ab)

    一.常用 'r':只读.该文件必须已存在. 'r+':可读可写.该文件必须已存在,写为追加在文件内容末尾. 'rb':表示以二进制方式读取文件.该文件必须已存在. 'w':只写.打开即默认创建一个新文 ...

  5. 文件读写r,rb,w,wb区别(对于换行符的处理)

    windows: 当用'w'方式写文件时,将\n变成两个字符\r\n写入文件. 当用'r'方式读文件时,将文件里的\r\n读入为\n. 使用'rb','wb'方式读写则不会发生上述转换 Linux: ...

  6. python读取文件r_python read文件的r和rb的区别

    r,rb,w,wb 那么在读写文件时,有无b标识的的主要区别在哪里呢? 1.文件使用方式标识 'r':默认值,表示从文件读取数据. 'w':表示要向文件写入数据,并截断以前的内容 'a':表示要向文件 ...

  7. Python3 文件读写r,w,a

    f = open('yesterday','r+') # r+就是读写模式,先读一个文件,在最后写 !!最常用的 f = open('yesterday','w+') # r+就是写读模式,先创建一个 ...

  8. c语言文件读写r 的作用,C语言 读写二进制文件

    查找了比较多的资源, 发现没有办法把text 文件转成binary文件 仅作为记录,不过这个例子可以去除换行符.#include #include #define N 255 int main() { ...

  9. python中w和wb区别_一篇搞懂python文件读写操作(r/r+/rb/w/w+/wb/a/a+/ab)

    关于文件操作的几种常用方式,网上已有很多解说,内容很丰富,但也因此有些杂乱复杂.今天,我就以我个人的学习经验写一篇详细又易懂的总结文章,希望大家看完之后会有所收获. 一.各模式逐个分解 'r':只读. ...

最新文章

  1. java super快速生成_为什么当我使用编辑器代码生成器时,eclipse会在构造函数中自动添加一个java super()方法?...
  2. java 闭包与回调
  3. 俞岳:IBM SmartCloud 的技术架构和开发实践
  4. 一篇文章帮你彻底搞清楚“I/O多路复用”和“异步I/O”的前世今生
  5. 二级c语言基础知识pdf下载,全国计算机等级考试二级C语言公共基础知识.pdf
  6. C/C++ 为什么#ifndef 头文件 要用大写加下划线?(这就是一种约定俗成的规范)
  7. 使用apache CXF和maven开发Web Service
  8. Redis五种数据结构应用场景
  9. docker之阿里云centos 7.x 启动容器报错处理办法
  10. callback函数_Nodejs 源码解析 util.promisify 如何将 Callback 转为 Promise
  11. 关于APKsmail中加入代码报错All register args must fit in 4 bits
  12. linux下配置防火墙
  13. springboot对应springcloud各个版本和官网查询地址
  14. 2500个常用汉字及繁体对应
  15. 网站加速的几种常用方法
  16. 【方法论】时间管理矩阵(Time Management Matrix )-给事情排序,列好1234再执行吧!
  17. 【HP-MC/SG】HP-MC/SG添加LV测试
  18. VMware克隆虚拟机后重启network失败
  19. poi 读取word文字图片表格
  20. 4K修复经典老电影背后的科学

热门文章

  1. Nginx防止恶意解析-禁止通过IP访问网站
  2. Ubuntu中恢复rm命令误删文件
  3. 如何提高Eclipse的运行速度 之总结
  4. android_ndk_build_flags 配置,Android studio配置NDK问题小结
  5. 【数据分析】脑图简介数据处理
  6. 【SQL】分析函数功能-排序
  7. CentOS7 服务器连接超时自动断开问题解决
  8. Android Studio升级到3.0,抛出Aapt2Exception异常
  9. window 和 linux 环境下杀死tomcat进程——也可以解决其他端口被占用的问题
  10. “ ModuleNotFoundError: No module named ‘tkinter‘ “的解决方法