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实现把utf-8格式的文件转换成gbk格式的文件
Jan 22 Python
浅谈Python 中整型对象的存储问题
May 16 Python
Python找出微信上删除你好友的人脚本写法
Nov 01 Python
python三方库之requests的快速上手
Mar 04 Python
元组列表字典(莫烦python基础)
Apr 03 Python
python查看文件大小和文件夹内容的方法
Jul 08 Python
Python 合并多个TXT文件并统计词频的实现
Aug 23 Python
详解基于Jupyter notebooks采用sklearn库实现多元回归方程编程
Mar 25 Python
pytorch 中的重要模块化接口nn.Module的使用
Apr 02 Python
django使用graphql的实例
Sep 02 Python
Python编解码问题及文本文件处理方法详解
Jun 20 Python
浅析Django接口版本控制
Jun 26 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+JS+rsa数据加密传输实现代码
2011/03/23 PHP
基于initPHP的框架介绍
2013/04/18 PHP
Yii PHP Framework实用入门教程(详细介绍)
2013/06/18 PHP
php中让人头疼的浮点数运算分析
2016/10/10 PHP
TFDN图片播放器 不错自动播放
2006/10/03 Javascript
getElementsByTagName vs selectNodes效率 及兼容的selectNodes实现
2010/02/26 Javascript
javascript 单例/单体模式(Singleton)
2011/04/07 Javascript
js自动闭合html标签(自动补全html标记)
2012/10/04 Javascript
jquery 日期控件datepicker属性详细解析
2013/11/08 Javascript
抛弃Nginx使用nodejs做反向代理服务器
2014/07/17 NodeJs
JavaScript中的toLocaleDateString()方法使用简介
2015/06/12 Javascript
jQuery动态添加可拖动元素完整实例(附demo源码下载)
2016/06/21 Javascript
利用jQuery实现打字机字幕效果实例代码
2016/09/02 Javascript
原生js编写基于面向对象的分页组件
2016/12/05 Javascript
JS实现十字坐标跟随鼠标效果
2017/12/25 Javascript
使用Vue的slot插槽分发父组件内容实现高度复用、更加灵活的组件(推荐)
2018/05/01 Javascript
如何更好的编写js async函数
2018/05/13 Javascript
详解多页应用 Webpack4 配置优化与踩坑记录
2018/10/16 Javascript
vue+Element实现搜索关键字高亮功能
2019/05/28 Javascript
JavaScript实现的滚动公告特效【基于jQuery】
2019/07/10 jQuery
JS操作字符串转数字的常见方法示例
2019/10/29 Javascript
angular8.5集成TinyMce5的使用和详细配置(推荐)
2020/11/16 Javascript
python的sorted用法详解
2019/06/25 Python
Python3之外部文件调用Django程序操作model等文件实现方式
2020/04/07 Python
Python列表去重复项的N种方法(实例代码)
2020/05/12 Python
Java爬虫技术框架之Heritrix框架详解
2020/07/22 Python
Carolina工作鞋官网:Carolina Footwear
2019/03/14 全球购物
欧洲最大的高尔夫零售商:American Golf
2019/09/02 全球购物
园林设计师自荐信
2013/11/18 职场文书
国贸专业求职信
2014/06/28 职场文书
2015年上半年党建工作总结
2015/03/30 职场文书
总账会计岗位职责
2015/04/02 职场文书
大学生入党自传2015
2015/06/26 职场文书
幼儿园六一儿童节开幕词
2016/03/04 职场文书
怎样评估创业计划书是否有可行性?
2019/08/07 职场文书
纯CSS3实现div按照顺序出入效果
2021/07/15 HTML / CSS