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发送Email方法实例
Aug 21 Python
python实现连接mongodb的方法
May 08 Python
pycharm+django创建一个搜索网页实例代码
Jan 24 Python
Python实现PS滤镜Fish lens图像扭曲效果示例
Jan 29 Python
Python使用sax模块解析XML文件示例
Apr 04 Python
django框架模板语言使用方法详解
Jul 18 Python
python 实现批量替换文本中的某部分内容
Dec 13 Python
Python+redis通过限流保护高并发系统
Apr 15 Python
Scrapy项目实战之爬取某社区用户详情
Sep 17 Python
python基于socket模拟实现ssh远程执行命令
Dec 05 Python
Python创建简单的神经网络实例讲解
Jan 04 Python
Anaconda安装pytorch和paddle的方法步骤
Apr 03 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
Apache2 httpd.conf 中文版
2006/12/06 PHP
PHP 导出数据到淘宝助手CSV的方法分享
2010/02/27 PHP
PHP四舍五入精确小数位及取整
2014/01/14 PHP
关于JavaScript的面向对象和继承有利新手学习
2013/01/11 Javascript
JavaScript的继承的封装介绍
2013/10/15 Javascript
javascript 兼容各个浏览器的事件
2015/02/04 Javascript
在JavaScript中访问字符串的子串
2015/07/07 Javascript
jquery实现九宫格大转盘抽奖
2015/11/13 Javascript
Node.js的MongoDB驱动Mongoose基本使用教程
2016/03/01 Javascript
JavaScript 数组的深度复制解析
2016/11/02 Javascript
JavaScript中动态向表格添加数据
2017/01/24 Javascript
小程序登录之支付宝授权的实现示例
2019/12/13 Javascript
JS数组方法reverse()用法实例分析
2020/01/18 Javascript
[57:12]完美世界DOTA2联赛循环赛 Inki vs Matador BO2第一场 10.31
2020/11/02 DOTA
Python中的异常处理简明介绍
2015/04/13 Python
深入浅析Python中join 和 split详解(推荐)
2016/06/30 Python
关于Python中空格字符串处理的技巧总结
2017/08/10 Python
Python 私有化操作实例分析
2019/11/21 Python
opencv python如何实现图像二值化
2020/02/03 Python
Python文件夹批处理操作代码实例
2020/07/21 Python
Python3爬虫发送请求的知识点实例
2020/07/30 Python
Python操作word文档插入图片和表格的实例演示
2020/10/25 Python
网页布局中CSS样式无效的十个重要原因详解
2017/08/10 HTML / CSS
叙述DBMS对数据控制功能有哪些
2016/06/12 面试题
.net C#面试题
2012/08/28 面试题
自荐信包含哪些内容
2013/10/30 职场文书
护士找工作求职信
2014/07/02 职场文书
岗位工作说明书
2014/07/29 职场文书
购房个人委托书范本
2014/10/11 职场文书
2015年财务试用期工作总结
2014/12/24 职场文书
小学生作文批改评语
2014/12/25 职场文书
授权委托书
2015/01/28 职场文书
2015年基层党建工作总结
2015/05/14 职场文书
首都博物馆观后感
2015/06/05 职场文书
使用CSS实现小三角边框原理解析
2021/11/07 HTML / CSS
python+pyhyper实现识别图片中的车牌号思路详解
2022/12/24 Python