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装饰器使用实例:验证参数合法性
Jun 24 Python
如何使用python爬取csdn博客访问量
Feb 14 Python
常见python正则用法的简单实例
Jun 21 Python
基于Django模板中的数字自增(详解)
Sep 05 Python
Sublime开发python程序的示例代码
Jan 24 Python
在python中以相同顺序shuffle两个list的方法
Dec 13 Python
python 批量解压压缩文件的实例代码
Jun 27 Python
python代码实现逻辑回归logistic原理
Aug 07 Python
python爬虫豆瓣网的模拟登录实现
Aug 21 Python
Python 面向对象静态方法、类方法、属性方法知识点小结
Mar 09 Python
django使用F方法更新一个对象多个对象字段的实现
Mar 28 Python
Python Flask搭建yolov3目标检测系统详解流程
Nov 07 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
adodb与adodb_lite之比较
2006/12/31 PHP
基于PHP实现数据分页显示功能
2016/05/26 PHP
IE6与IE7中,innerHTML获取param的区别
2009/03/15 Javascript
无缝滚动js代码通俗易懂(自写)
2013/06/19 Javascript
js动态创建表格,删除行列的小例子
2013/07/20 Javascript
浏览器图片选择预览、旋转、批量上传的JS代码实现
2013/12/04 Javascript
JavaScript字符串对象toUpperCase方法入门实例(用于把字母转换为大写)
2014/10/17 Javascript
jQuery中not()方法用法实例
2015/01/06 Javascript
js实现遮罩层弹出框的方法
2015/01/15 Javascript
通过实例理解javascript中没有函数重载的概念
2015/06/03 Javascript
js多功能分页组件layPage使用方法详解
2016/05/19 Javascript
js实时获取窗口大小变化的实例代码
2016/11/18 Javascript
概述javascript在Google IE中的调试技巧
2016/11/24 Javascript
vue 实现搜索的结果页面支持全选与取消全选功能
2019/05/10 Javascript
angular多语言配置详解
2019/05/16 Javascript
[03:06]3分钟带你回顾DOTA2完美盛典&完美大师赛
2017/12/06 DOTA
约瑟夫问题的Python和C++求解方法
2015/08/20 Python
python通过配置文件共享全局变量的实例
2019/01/11 Python
Python3实现统计单词表中每个字母出现频率的方法示例
2019/01/28 Python
解决python中用matplotlib画多幅图时出现图形部分重叠的问题
2019/07/07 Python
浅析python中while循环和for循环
2019/11/19 Python
selenium+Chrome滑动验证码破解二(某某网站)
2019/12/17 Python
Python csv文件记录流程代码解析
2020/07/16 Python
详解CSS 3 中的 calc() 方法
2018/01/12 HTML / CSS
W3C公布最新的HTML5标准草案
2008/10/17 HTML / CSS
澳大利亚领先的亚麻品牌:Bed Threads
2019/12/16 全球购物
英国最受欢迎的母婴精品品牌:JoJo Maman BéBé
2021/02/17 全球购物
优秀班干部事迹材料
2014/01/26 职场文书
司机检讨书
2014/02/13 职场文书
护士医德医风自我评价
2014/09/15 职场文书
常务副县长“三严三实”对照检查材料思想汇报
2014/10/05 职场文书
2015年绩效考核工作总结
2015/05/23 职场文书
vue项目两种方式实现竖向表格的思路分析
2021/04/28 Vue.js
mysql连接查询中and与where的区别浅析
2021/07/01 MySQL
CSS中实现动画效果-附案例
2022/02/28 HTML / CSS
nginx七层负载均衡配置详解
2022/07/15 Servers