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中的jquery PyQuery库使用小结
May 13 Python
Python中动态获取对象的属性和方法的教程
Apr 09 Python
实例Python处理XML文件的方法
Aug 31 Python
Python正规则表达式学习指南
Aug 02 Python
Django基础之Model操作步骤(介绍)
May 27 Python
Python实现的科学计算器功能示例
Aug 04 Python
python操作xlsx文件的包openpyxl实例
May 03 Python
python自动发微信监控报警
Sep 06 Python
实现Python与STM32通信方式
Dec 18 Python
python 读写文件包含多种编码格式的解决方式
Dec 20 Python
pytorch中的上采样以及各种反操作,求逆操作详解
Jan 03 Python
解决Python import docx出错DLL load failed的问题
Feb 13 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中3种生成XML文件方法的速度效率比较
2012/10/06 PHP
PHP中大于2038年时间戳的问题处理方案
2015/03/03 PHP
PHP网站建设的流程与步骤分享
2015/09/25 PHP
解决laravel中日志权限莫名变成了root的问题
2019/10/17 PHP
jquery关于图形报表的运用实现代码
2011/01/06 Javascript
Angularjs注入拦截器实现Loading效果
2015/12/28 Javascript
轻松掌握JavaScript中的Math object数学对象
2016/05/26 Javascript
js replace(a,b)之替换字符串中所有指定字符的方法
2016/08/17 Javascript
Vue.js第二天学习笔记(vue-router)
2016/12/01 Javascript
BootStrap Table后台分页时前台删除最后一页所有数据refresh刷新后无数据问题
2016/12/28 Javascript
jQuery内容筛选选择器实例代码
2017/02/06 Javascript
十大热门的JavaScript框架和库
2017/03/21 Javascript
微信小程序request请求后台接口php的实例详解
2017/09/20 Javascript
用Node提供静态文件服务的方法
2018/07/06 Javascript
小程序实现人脸识别功能(百度ai)
2018/12/23 Javascript
基于vue如何发布一个npm包的方法步骤
2019/05/15 Javascript
Django接受前端数据的几种方法总结
2016/11/04 Python
python 判断网络连通的实现方法
2018/04/22 Python
Pycharm2017版本设置启动时默认自动打开项目的方法
2018/10/29 Python
numpy中三维数组中加入元素后的位置详解
2019/11/28 Python
Anaconda详细安装步骤图文教程
2020/11/12 Python
印尼最大的网上书店:Gramedia.com
2018/09/13 全球购物
一道SQL面试题
2012/12/31 面试题
销售顾问的岗位职责
2013/11/13 职场文书
电台实习生求职信
2014/02/25 职场文书
日化店促销方案
2014/03/26 职场文书
运动会横幅标语
2014/06/17 职场文书
出纳试用期自我鉴定范文
2014/09/16 职场文书
基层党员对照检查材料
2014/09/24 职场文书
我的大学四年规划书范文2014
2014/09/26 职场文书
小学国庆节活动总结
2015/03/23 职场文书
开学随笔
2015/08/15 职场文书
2019学子的答谢词范本!
2019/07/05 职场文书
解决python存数据库速度太慢的问题
2021/04/23 Python
Python+OpenCV实现图片中的圆形检测
2022/04/07 Python
教你win10系统中APPCRASH事件问题解决方法
2022/07/15 数码科技