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 相关文章推荐
PyMongo安装使用笔记
Apr 27 Python
Python中数字以及算数运算符的相关使用
Oct 12 Python
Python基于matplotlib绘制栈式直方图的方法示例
Aug 09 Python
uwsgi+nginx部署Django项目操作示例
Dec 04 Python
Python基础之条件控制操作示例【if语句】
Mar 23 Python
Python字符串匹配之6种方法的使用详解
Apr 08 Python
Tornado实现多进程/多线程的HTTP服务详解
Jul 25 Python
python中的subprocess.Popen()使用详解
Dec 25 Python
python中tkinter窗口位置\坐标\大小等实现示例
Jul 09 Python
Python库安装速度过慢解决方案
Jul 14 Python
Python SMTP发送电子邮件的示例
Sep 23 Python
Python matplotlib 利用随机函数生成变化图形
Apr 26 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
在PHP3中实现SESSION的功能(二)
2006/10/09 PHP
15种PHP Encoder的比较
2007/03/06 PHP
PHP 开源框架22个简单简介
2009/08/24 PHP
php获取URL中带#号等特殊符号参数的解决方法
2014/09/02 PHP
javascript parseInt与Number函数的区别
2010/01/21 Javascript
jquery 应用代码 方便的排序功能
2010/02/06 Javascript
理清apply(),call()的区别和关系
2011/08/14 Javascript
js 判断控件获得焦点的示例代码
2014/03/04 Javascript
JavaScript数字和字符串转换示例
2014/03/26 Javascript
javascript正则表达式使用replace()替换手机号的方法
2015/01/19 Javascript
JQUERY简单按钮轮换选中效果实现方法
2015/05/07 Javascript
jqGrid表格应用之新增与删除数据附源码下载
2015/12/02 Javascript
zepto与jquery的区别及zepto的不同使用8条小结
2016/07/28 Javascript
Angularjs上传图片实例详解
2017/08/06 Javascript
Validform验证时可以为空否则按照指定格式验证
2017/10/20 Javascript
详解Angular5路由传值方式及其相关问题
2018/04/28 Javascript
详解Angular模板引用变量及其作用域
2018/11/23 Javascript
Vue中用props给data赋初始值遇到的问题解决
2018/11/27 Javascript
探索JavaScript中私有成员的相关知识
2019/06/13 Javascript
vue 解决异步数据更新问题
2019/10/29 Javascript
Python序列之list和tuple常用方法以及注意事项
2015/01/09 Python
Python抓取百度查询结果的方法
2015/07/08 Python
基于Python Shell获取hostname和fqdn释疑
2016/01/25 Python
使用Python的package机制如何简化utils包设计详解
2017/12/11 Python
基于Python开发chrome插件的方法分析
2018/07/07 Python
python实现两个dict合并与计算操作示例
2019/07/01 Python
Python 最强编辑器详细使用指南(PyCharm )
2019/09/16 Python
numpy.linalg.eig() 计算矩阵特征向量方式
2019/11/29 Python
Python 中@property的用法详解
2020/01/15 Python
美国杂志订阅折扣与优惠网站:Magazines.com
2016/08/31 全球购物
阿根廷在线宠物商店:Puppis
2018/03/23 全球购物
农业大学毕业生的个人自我评价
2013/10/11 职场文书
职员竞岗演讲稿
2014/05/14 职场文书
2015年挂职锻炼个人总结
2015/10/22 职场文书
关于应聘教师的自荐信
2016/01/28 职场文书
不同品牌、不同型号对讲机如何互相通联
2022/02/18 无线电