r+w+无法写入读取文件:w+和r+的根本区别

xiaoxiao2021-02-28  62

在python的文件操作中,Open是第一步。Open的第二个参数是一个字符串,想必大家都清楚,表示打开方式,主要就是读或者写:

w:以写方式打开, a:以追加模式打开 (从 EOF 开始, 必要时创建新文件) r+:以读写模式打开 w+:以读写模式打开 (参见 w ) a+:以读写模式打开 (参见 a ) rb:以二进制读模式打开 wb:以二进制写模式打开 (参见 w ) ab:以二进制追加模式打开 (参见 a ) rb+:以二进制读写模式打开 (参见 r+ ) wb+:以二进制读写模式打开 (参见 w+ ) ab+:以二进制读写模式打开 (参见 a+ )

以上是常用的参考资料。

乍一看,w+和r+似乎是一样的,都是以读写模式打开。一般的时候,图省事,很多时候我们都随便用一个带‘’+‘’的打开。但是,在实际应用过程中,w+和r+其实大有不同。

以我写的一个数据清洗的小程序为例:

程序的功能是把从百度文库或者知网阅读器里复制出来的文字进行初步清洗,删除用各种编码打出来的多余空格和换行符,并全部替换为一个‘’

#clean.py import re,os def clean(x): i=os.path.splitext(x)#抠文件路径 x=open(x,'r+',encoding='utf-16') x=str(x.read()) x=x.replace('\xa0',' ') x=x.replace('\n','') x=re.sub(' +',' ',x) y=open(i[0]+'_clean'+i[1],'w',1,encoding='utf-16')#【位置1】 y.write(x) y.close() y=open(i[0]+'_clean'+i[1],'r+',1,encoding='utf-16')#【位置2】 return y 可以看到,在【位置1】和【位置2】处都需要一个参数。

其中【位置1】处的用于创建一个新文件并写入清洗后的数据,新文件应该是不存在的。

然而【位置2】则是用于打开刚才创建好的新文件并用于返回查看。

有以下几种参数设置方式:

【位置1】w/w+【位置2】r/r+

程序运行正常,得到预期结果。

【位置1】w/w+【位置2】w/w+

程序运行正常,但结果是一段空白,新文件被创建了,但里面什么都没。

【位置1】r/r+【位置2】随意

错误:文件未找到(FileNotFound)

通过总结以上规律,我们就可以知道其中的规律:

①:‘+’仅仅代表追加功能,其中模式的运行方式还是以'+'前的为主。

②:w模式拥有在文件不存在时便创建文件的能力,但是打开原本有内容的文件时,会默认文件为空文件并开始写入。而这时候如果什么都没有写,那文件就会被当做一个空文件打开(或者进一步的保存)。

③r模式不拥有自动创建新文件的能力,也就是必须打开已存在的文件,但是它是真正能够读取文件里面内容的方式。

综上,‘+’仅仅是追加,我们在操作文件时,还是应该让w和r处在合适的位置上。

转载请注明原文地址: https://www.6miu.com/read-82110.html

最新回复(0)