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中的引用和拷贝浅析
Nov 22 Python
Python with语句上下文管理器两种实现方法分析
Feb 09 Python
Python使用Selenium+BeautifulSoup爬取淘宝搜索页
Feb 24 Python
Python之dict(或对象)与json之间的互相转化实例
Jun 05 Python
python中web框架的自定义创建
Sep 08 Python
pycharm修改file type方式
Nov 19 Python
Python 求数组局部最大值的实例
Nov 26 Python
Python+appium框架原生代码实现App自动化测试详解
Mar 06 Python
解决Python中报错TypeError: must be str, not bytes问题
Apr 07 Python
python爬虫线程池案例详解(梨视频短视频爬取)
Feb 20 Python
Python中OpenCV实现简单车牌字符切割
Jun 11 Python
移除Selenium中window.navigator.webdriver值
Jun 10 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 强制性文件下载功能的函数代码(任意文件格式)
2010/05/26 PHP
Extjs学习笔记之二 初识Extjs之Form
2010/01/07 Javascript
JS特殊函数(Function()构造函数、函数直接量)区别介绍
2013/05/19 Javascript
Query中click(),bind(),live(),delegate()的区别
2013/11/19 Javascript
Nodejs进程管理模块forever详解
2014/06/01 NodeJs
jQuery学习笔记之jQuery原型属性和方法
2014/06/09 Javascript
JavaScript实现的石头剪刀布游戏源码分享
2014/08/22 Javascript
javascript中的遍历for in 以及with的用法
2014/12/22 Javascript
javascript瀑布流布局实现方法详解
2016/02/17 Javascript
AngularJS教程之环境设置
2016/08/16 Javascript
HTML Table 空白单元格补全的简单实现
2016/10/13 Javascript
jQuery ajax请求struts action实现异步刷新
2017/04/19 jQuery
webpack vue 项目打包生成的文件,资源文件报404问题的修复方法(总结篇)
2018/01/09 Javascript
Node.js中的cluster模块深入解读
2018/06/11 Javascript
在axios中使用params传参的时候传入数组的方法
2018/09/25 Javascript
JS原生带缩略图的图片切换效果
2018/10/10 Javascript
微信小程序购物车、父子组件传值及calc的注意事项总结
2018/11/14 Javascript
JS温故而知新之变量提升和时间死区
2019/01/27 Javascript
JS代码简洁方式之函数方法详解
2020/07/28 Javascript
基于JavaScript的数据结构队列动画实现示例解析
2020/08/06 Javascript
[03:03]DOTA2 2017国际邀请赛开幕战队入场仪式
2017/08/09 DOTA
对于Python中线程问题的简单讲解
2015/04/03 Python
用python 实现在不确定行数情况下多行输入方法
2019/01/28 Python
Python文本文件的合并操作方法代码实例
2020/03/31 Python
浅析python连接数据库的重要事项
2021/02/22 Python
十一个高级MySql面试题
2014/10/06 面试题
轻金属冶金专业毕业生自荐信
2013/11/02 职场文书
《夏夜多美》教学反思
2014/02/17 职场文书
中学校庆方案
2014/03/17 职场文书
企业仓管员岗位职责
2014/06/15 职场文书
关于诚信的活动方案
2014/08/18 职场文书
八一建军节演讲稿
2014/09/10 职场文书
老兵退伍标语
2014/10/07 职场文书
企业群众路线教育实践活动心得体会
2014/11/03 职场文书
2014年前台接待工作总结
2014/12/05 职场文书
Redis 操作多个数据库的配置的方法实现
2022/03/23 Redis