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中AND、OR的一个使用小技巧
Feb 18 Python
Python实现大文件排序的方法
Jul 10 Python
python 检查是否为中文字符串的方法
Dec 28 Python
Python判断是否json是否包含一个key的方法
Dec 31 Python
python爬虫之验证码篇3-滑动验证码识别技术
Apr 11 Python
使用PYTHON解析Wireshark的PCAP文件方法
Jul 23 Python
Python jieba库用法及实例解析
Nov 04 Python
完美解决Django2.0中models下的ForeignKey()问题
May 19 Python
浅谈Python中文件夹和python package包的区别
Jun 01 Python
Python变量及数据类型用法原理汇总
Aug 06 Python
Python中openpyxl实现vlookup函数的实例
Oct 28 Python
python实现定时发送邮件
Dec 23 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抓屏函数实现屏幕快照代码分享
2014/01/02 PHP
php通过字符串调用函数示例
2014/03/02 PHP
Laravel中批量赋值Mass-Assignment的真正含义详解
2017/09/29 PHP
laravel ORM关联关系中的 with和whereHas用法
2019/10/16 PHP
JavaScript 闭包在封装函数时的简单分析
2009/11/28 Javascript
JQuery 构建客户/服务分离的链接模型中Table中的排序分析
2010/01/22 Javascript
javascript使用activex控件的代码
2011/01/27 Javascript
web网页按比例显示图片实现原理及js代码
2013/08/09 Javascript
JavaScript包装对象使用介绍
2013/08/29 Javascript
关闭ie窗口清除Session的解决方法
2014/01/10 Javascript
JavaScript二维数组实现的省市联动菜单
2014/05/08 Javascript
JavaScript在IE和FF下的兼容性问题
2014/05/19 Javascript
input标签内容改变的触发事件介绍
2014/06/18 Javascript
ajaxFileUpload.js插件支持多文件上传的方法
2014/09/02 Javascript
jquery实现的美女拼图游戏实例
2015/05/04 Javascript
AngularJS深入探讨scope,继承结构,事件系统和生命周期
2016/11/02 Javascript
如何给ss bash 写一个 WEB 端查看流量的页面
2017/03/23 Javascript
vue通过路由实现页面刷新的方法
2018/01/25 Javascript
浅谈微信小程序之官方UI框架we-ui使用教程
2018/08/20 Javascript
微信小程序在地图选择地址并返回经纬度简单示例
2018/12/03 Javascript
Vue状态模式实现窗口停靠功能(灵动、自由, 管理后台Admin界面)
2020/03/06 Javascript
javascript设计模式 ? 工厂模式原理与应用实例分析
2020/04/09 Javascript
js实现无缝轮播图插件封装
2020/07/31 Javascript
Python正则表达式急速入门(小结)
2019/12/16 Python
Python爬取腾讯视频评论的思路详解
2019/12/19 Python
Python中使用filter过滤列表的一个小技巧分享
2020/05/02 Python
美国独家设计师眼镜在线光学商店:Glasses Gallery
2017/12/28 全球购物
优秀求职自荐信怎样写
2013/12/18 职场文书
考试作弊被抓检讨书
2014/01/10 职场文书
旺仔牛奶广告词
2014/03/20 职场文书
美容院经理岗位职责
2014/04/03 职场文书
2015年上半年信访工作总结
2015/03/30 职场文书
2015年度销售个人工作总结
2015/03/31 职场文书
2016年教代会开幕词
2016/03/04 职场文书
简历自我评价范文
2019/04/24 职场文书
Java8中接口的新特性使用指南
2021/11/01 Java/Android