文件读写’r'和’rb’区别

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

文件读写’r'和’rb’区别

原文地址:https://www.cnblogs.com/fmgao-technology/p/9054856.html

时间: 2024-11-08 23:01:31

文件读写’r'和’rb’区别的相关文章

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

一.Python文件读写的几种模式: r,rb,w,wb 那么在读写文件时,有无b标识的的主要区别在哪里呢? 1.文件使用方式标识 'r':默认值,表示从文件读取数据.'w':表示要向文件写入数据,并截断以前的内容'a':表示要向文件写入数据,添加到当前内容尾部'r+':表示对文件进行可读写操作(删除以前的所有数据)'r+a':表示对文件可进行读写操作(添加到当前文件尾部)'b':表示要读写二进制数据 2.读文件 进行读文件操作时,直到读到文档结束符(EOF)才算读取到文件最后,Python会认

Python3 文件读写r,w,a

1 # Author;Tsukasa 2 ''' 3 f = open('yesterday','w') #文件句柄...注意open分为'r'读模式,'w'写模式(d会先创建文件或者覆盖文件),'a'为追加模式(添加), 4 #data = f.read()#读取文件read() 5 f.write('hello') #注意如果要写文件的话 上面open模式要改 6 7 8 f = open('yesterday','a') 9 print(f.tell())#打印当前光标位置 10 #pri

python基础操作_文件读写操作

#文件读写# r只能读不能写,且文件必须存在,w只能写不能读,a只能写不能读# w+是写读模式,清空原文件内容# r+是读写模式,没有清空原文件内容,# 只要有r,文件必须存在,只要有w,都会清空原文件# 如果在open的时候没有指定模式,那就是r的模式打开文件.# a+ 又能写又能读又不校验文件是否存在,还不清空原文件,完美啊# b是2进制的模式打开或者读写.如rb+ wb+ ab+# readline 读一行# readlines 读全部# writelens 写全部f=open('E:\i

转载:python文件打开方式详解——a、a+、r+、w+区别

第一步 排除文件打开方式错误: r只读,r+读写,不创建 w新建只写,w+新建读写,会将文件内容清零 (以w方式打开,不能读出.w+可读写) **w+与r+区别: r+:可读可写,若文件不存在,报错:w+: 可读可写,若文件不存在,创建 r+与a+区别: [python] view plain copy print? <span style="background-color: rgb(255, 255, 255);">fd = open("1.txt"

【转】python文件打开方式详解——a、a+、r+、w+区别

原文地址:http://blog.csdn.net/ztf312/article/details/47259805 第一步 排除文件打开方式错误: r只读,r+读写,不创建 w新建只写,w+新建读写,二者都会将文件内容清零 (以w方式打开,不能读出.w+可读写) **w+与r+区别: r+:可读可写,若文件不存在,报错:w+: 可读可写,若文件不存在,创建 r+与a+区别: fd = open("1.txt",'w+') fd.write('123') fd = open("

python文件打开方式详解——a、a+、r+、w+区别

出处: http://blog.csdn.net/ztf312/ 第一步 排除文件打开方式错误: r只读,r+读写,不创建 w新建只写,w+新建读写,二者都会将文件内容清零 (以w方式打开,不能读出.w+可读写) w+与r+区别: r+:可读可写,若文件不存在,报错:w+: 可读可写,若文件不存在,创建 r+与a+区别: [python] view plain copy print? fd = open("1.txt",'w+') fd.write('123') fd = open(&

【C++】小心使用文件读写模式:回车(&#39;\r&#39;) 换行(&#39;\n&#39;)问题的一次纠结经历

原来没有仔细注意C++读写文件的二进制模式和文本模式,这次吃了大亏.(平台:windows  VS2012) BUG出现: 写了一个程序A,生成一个文本文件F保存在本地,然后用程序B读取此文件计算MD5值. 将该文件上传到服务器,再用程序B将文件从服务器上下载下来计算MD5值,神奇的发现两次计算的MD5值不一样,文件被谁改了?? 排除问题: 1.首先对比了生成文件F和上传到服务器的文件,发现文件复制过程无差错,是同一个文件. 2.用程序B下载文件F后,保存在本地,发现文件与原文件F不一致,对比二

C和C++中文件读写的区别

C中采用的主要是文件指针的办法 C++中对文件的操作主要运用了“文件流”(即非标准的输入输出)的思想 #include<stdio.h> //... FILE* fp=fopen("1.txt","w"); if(fp!=NULL){ //查看文件是否创建成功(若文件未打开成功则会返回NULL) fprintf(fp,"hello world"); fclose(fp); //该语句若忘记,则可能在程序运行前并看不到文件内容,因为缓冲

Win环境下的文件读写

在win环境下,有许多方法可以对文件进行读写操作,如MFC 中的CFile类,及一些开源的项目如QT中的QFile.开源的好得是可以多平台,而MFC只是微软自家的东西,对于想写跨平台的人,最好不用MFC. 最近在写开发时,突然碰到了一个问题,也是与读写文件有关,不过用的是C的方法,而不是C++,问题的表现是用C 中的Open创建的文件都是只读的,平常很少用这个方法所在网上找了下,才发现这个函数还有一个权限参数,默认是只读.现将C方式下的两种文件操作归纳下 open比起fopen是更低级别的IO操