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抓取模板之家的CSS模板
Mar 16 Python
使用Python脚本对Linux服务器进行监控的教程
Apr 02 Python
Django发送html邮件的方法
May 26 Python
Python全排列操作实例分析
Jul 24 Python
对Python中的条件判断、循环以及循环的终止方法详解
Feb 08 Python
如何用Python做一个微信机器人自动拉群
Jul 03 Python
如何安装并使用conda指令管理python环境
Jul 10 Python
python自动结束mysql慢查询会话的实例代码
Oct 27 Python
python 截取XML中bndbox的坐标中的图像,另存为jpg的实例
Mar 10 Python
用python制作个视频下载器
Feb 01 Python
python中取整数的几种方法
Nov 07 Python
Python实现聚类K-means算法详解
Jul 15 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
如何限制访问者的ip(PHPBB的代码)
2006/10/09 PHP
PHP 伪静态技术原理以及突破原理实现介绍
2013/07/12 PHP
php实现excel中rank函数功能的方法
2015/01/20 PHP
php使用strip_tags()去除html标签仍有空白的解决方法
2016/07/28 PHP
PHP PDOStatement::rowCount讲解
2019/02/01 PHP
php反射学习之依赖注入示例
2019/06/14 PHP
jQuery实现点击标题输入详细信息
2013/04/16 Javascript
javascript中的__defineGetter__和__defineSetter__介绍
2014/08/15 Javascript
Node.js node-schedule定时任务隔多少分钟执行一次的方法
2015/02/10 Javascript
jQuery form插件之ajaxForm()和ajaxSubmit()的可选参数项对象
2016/01/23 Javascript
javascript 广告移动特效的实现代码
2016/06/25 Javascript
jQuery实现的动态文字变化输出效果示例【附演示与demo源码下载】
2017/03/24 jQuery
jquery+css实现侧边导航栏效果
2017/06/12 jQuery
在 Angular6 中使用 HTTP 请求服务端数据的步骤详解
2018/08/06 Javascript
vue中v-for通过动态绑定class实现触发效果
2018/12/06 Javascript
详解jQuery-each()方法
2019/03/13 jQuery
详解微信小程序-获取用户session_key,openid,unionid - 后端为nodejs
2019/04/29 NodeJs
JavaScript实现随机点名器
2020/03/25 Javascript
vscode 使用Prettier插件格式化配置使用代码详解
2020/08/10 Javascript
[03:38]2014DOTA2西雅图国际邀请赛 VG战队巡礼
2014/07/07 DOTA
python在控制台输出进度条的方法
2015/06/20 Python
利用Python将时间或时间间隔转为ISO 8601格式方法示例
2017/09/05 Python
django2.2 和 PyMySQL版本兼容问题
2020/02/17 Python
金宝贝童装官网:Gymboree
2016/08/31 全球购物
意大利比基尼品牌:MISS BIKINI
2019/11/02 全球购物
娇韵诗香港官网:Clarins香港
2020/08/13 全球购物
C语言50道问题
2014/10/23 面试题
如何理解委托
2012/01/06 面试题
敬老模范事迹
2014/05/21 职场文书
教师节活动总结
2014/08/29 职场文书
授权委托书(法人单位用)
2014/09/29 职场文书
同学会邀请函模板
2015/01/30 职场文书
python如何读取.mtx文件
2021/04/22 Python
SpringCloud Alibaba 基本开发框架搭建过程
2021/06/13 Java/Android
Win11电脑显示本地时间与服务器时间不一致怎么解决?
2022/04/05 数码科技
聊聊CSS粘性定位sticky案例解析
2022/06/01 HTML / CSS