Python文件读写w+和r+区别解析


Posted in Python onMarch 26, 2020

其实r 是只读,只能读不能写,这是很明确的,但是r+是可读写,变成r+后还没太明白到底加了什么,还是照样写不了,有没有这样的体验呢,如下代码,只读时

f = open("test.txt", 'r', encoding="utf-8") # 文件句柄
f.write("we are heros\n")

data = f.read()
print(data, type(data))
f.close()

这样的话报错是明显的:io.UnsupportedOperation: not writable,不可写应都能理解,但是变成r+呢

f = open("test.txt", 'r+', encoding="utf-8") # 文件句柄
f.write("we are heros\n")

data = f.read()
print(data, type(data))
f.close()

你试过会发现,什么也没打印出来,同时注意!!!也没有报错。到底是什么意思呢?

其实是由于读写机制的问题,当一个文件被读或者写一次后,文件中类指针的东西指向的是整个文件的末尾,再次读时从末尾开始读的话肯定是什么都

读不到了,所以会出现这样的问题,和连续f.read()两次的话,第二次什么都不会读到的原因是相同的。那如何写完了接着读呢,见代码

f = open("test.txt", 'r+', encoding="utf-8") # 文件句柄
 f.write("we are heros\n")
 f.seek(0)
 data = f.read()
 print(data, type(data))
 f.close()

加上f.seek(0)使得类指针的东西回到文件的开头然后从头开始读即可。配合f.tell()使用,英文及字符返回的是那个类指针的位置(也就是字符个数),但是中文的话是字符 个数*3,具体原因还得请大侠给讲讲。

r+与w+啥区别呢,不能简单的理解为读写都可,细节之处略有不同!

  • r+:先读后写的话是在原有文本后添加, 因为读完后类指针已经在最末尾了,如果是先写后读的话,是从头开始覆盖式写(如只修改了前面的字符,后面字符是不会被删掉的),类指针停留在写完的末尾,不是文档末尾,可以读出未被覆盖写的部分;
  • w+:为先写后读,先写完后使用f.seek(0)回到初始位置然后开始读,如果先读的话是读不出任何东西的,因为w+也是纯粹的覆盖写,在未使用写操作前文档是完全空白的,无论之前该文件里有什么。so ,只能先写后读。
  • r和w的区别,r必须已经存在这个文件了而 w时文件可以有也可以没有,if有被覆盖,else没有则创建一个(慎用),r+的写也是覆盖的!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python使用PyV8执行javascript代码示例分享
Dec 04 Python
Python使用minidom读写xml的方法
Jun 03 Python
Python实现身份证号码解析
Sep 01 Python
简单谈谈Python中的闭包
Nov 30 Python
详解Python中表达式i += x与i = i + x是否等价
Feb 08 Python
《Python学习手册》学习总结
Jan 17 Python
python批量读取txt文件为DataFrame的方法
Apr 03 Python
使用pytorch和torchtext进行文本分类的实例
Jan 08 Python
关于Python turtle库使用时坐标的确定方法
Mar 19 Python
python合并多个excel文件的示例
Sep 23 Python
python报错TypeError: ‘NoneType‘ object is not subscriptable的解决方法
Nov 05 Python
只需要100行Python代码就可以实现的贪吃蛇小游戏
May 27 Python
Python装饰器实现方法及应用场景详解
Mar 26 #Python
pycharm中导入模块错误时提示Try to run this command from the system terminal
Mar 26 #Python
Python多进程编程常用方法解析
Mar 26 #Python
简单了解python调用其他脚本方法实例
Mar 26 #Python
Python tornado上传文件的功能
Mar 26 #Python
Python Tornado批量上传图片并显示功能
Mar 26 #Python
python列表删除和多重循环退出原理详解
Mar 26 #Python
You might like
PHP中的cookie不用刷新就生效的方法
2012/02/04 PHP
php下载文件源代码(强制任意文件格式下载)
2014/05/09 PHP
Ajax和PHP正则表达式验证表单及验证码
2016/09/24 PHP
PHP 出现 http500 错误的解决方法
2021/03/09 PHP
JS中setTimeout()的用法详解
2013/04/14 Javascript
详解JavaScript函数
2015/12/01 Javascript
多种jQuery绑定事件的实现方式
2016/06/13 Javascript
Vue.js表单控件实践
2016/10/27 Javascript
详解vue之页面缓存问题(基于2.0)
2017/01/10 Javascript
微信小程序 PHP后端form表单提交实例详解
2017/01/12 Javascript
基于JavaScript实现选项卡效果
2017/07/21 Javascript
详解vue填坑之解决部分浏览器不支持pushState方法
2018/07/12 Javascript
vuejs使用axios异步访问时用get和post的实例讲解
2018/08/09 Javascript
详解nodejs 开发企业微信第三方应用入门教程
2019/03/12 NodeJs
JS浮点数运算结果不精确的Bug解决
2019/08/01 Javascript
LayUI数据接口返回实体封装的例子
2019/09/12 Javascript
javascript实现fetch请求返回的统一拦截
2019/12/22 Javascript
js中调用微信的扫描二维码功能的实现代码
2020/04/11 Javascript
前端vue+elementUI如何实现记住密码功能
2020/09/20 Javascript
原生js实现弹幕效果
2020/11/29 Javascript
详解在Python的Django框架中创建模板库的方法
2015/07/20 Python
python爬虫框架scrapy实战之爬取京东商城进阶篇
2017/04/24 Python
Windows下将Python文件打包成.EXE可执行文件的方法
2018/08/03 Python
opencv python 图像轮廓/检测轮廓/绘制轮廓的方法
2019/07/03 Python
浅析CSS3 中的 transition,transform,translate之间区别和作用
2020/03/26 HTML / CSS
Sofft鞋官网:世界知名鞋类品牌
2017/03/28 全球购物
世界上最大的皮肤科医生拥有和经营的美容网站:LovelySkin
2021/01/03 全球购物
SQL中where和having的区别
2012/06/17 面试题
安全生产检讨书
2014/01/21 职场文书
无刑事犯罪记录证明范本
2014/09/29 职场文书
家属慰问信
2015/02/14 职场文书
预备党员考察表党小组意见
2015/06/01 职场文书
党小组考察意见
2015/06/02 职场文书
2016年学校“3.12”植树节活动总结
2016/03/16 职场文书
中国现代文学之经典散文三篇
2019/09/18 职场文书
Go微服务项目配置文件的定义和读取示例详解
2022/06/21 Golang