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创建只读属性对象的方法(ReadOnlyObject)
Feb 10 Python
Python脚本实现代码行数统计代码分享
Mar 10 Python
Python调用C语言开发的共享库方法实例
Mar 18 Python
Phantomjs抓取渲染JS后的网页(Python代码)
May 13 Python
Python 实现链表实例代码
Apr 07 Python
Python实现mysql数据库更新表数据接口的功能
Nov 19 Python
Python遍历某目录下的所有文件夹与文件路径
Mar 15 Python
python循环输出三角形图案的例子
Nov 22 Python
python二元表达式用法
Dec 04 Python
python根据字典的键来删除元素的方法
Aug 16 Python
Pycharm配置lua编译环境过程图解
Nov 28 Python
关于django python manage.py startapp 应用名出错异常原因解析
Dec 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
轻松入门: 煮好咖啡的七个诀窍
2021/03/03 冲泡冲煮
discuz图片顺序混乱解决方案
2015/07/29 PHP
一个完整的php文件上传类实例讲解
2015/10/27 PHP
CI框架中$this->load->library()用法分析
2016/05/18 PHP
PHP中的浅复制与深复制的实例详解
2017/10/26 PHP
laravel框架中间件简单使用方法示例
2020/01/25 PHP
通过 Dom 方法提高 innerHTML 性能
2008/03/26 Javascript
IE和firefox浏览器的event事件兼容性汇总
2009/12/06 Javascript
Jquery实战_读书笔记2 选择器
2010/01/22 Javascript
jQuery学习笔记 操作jQuery对象 文档处理
2012/09/19 Javascript
json数据处理技巧(字段带空格、增加字段、排序等等)
2013/06/14 Javascript
Jquery.Form 异步提交表单的简单实例
2014/03/03 Javascript
JS模仿编辑器实时改变文本框宽度和高度大小的方法
2015/08/17 Javascript
vue :src 文件路径错误问题的解决方法
2018/05/15 Javascript
详解javascript中的babel到底是什么
2018/06/21 Javascript
vue实现word,pdf文件的导出功能
2018/07/31 Javascript
一百行JS代码实现一个校验工具
2019/04/30 Javascript
[00:57]英雄,你的补给到了!
2020/11/13 DOTA
Python编写的com组件发生R6034错误的原因与解决办法
2013/04/01 Python
Python中的pass语句使用方法讲解
2015/05/14 Python
Python Json模块中dumps、loads、dump、load函数介绍
2018/05/15 Python
Python多线程编程之多线程加锁操作示例
2018/09/06 Python
Python Pandas批量读取csv文件到dataframe的方法
2018/10/08 Python
在VS2017中用C#调用python脚本的实现
2019/07/31 Python
pandas DataFrame行或列的删除方法的实现示例
2019/08/02 Python
django filter过滤器实现显示某个类型指定字段不同值方式
2020/07/16 Python
Python如何实现远程方法调用
2020/08/07 Python
使用javascript和HTML5 Canvas画的四渐变色播放按钮效果
2014/04/10 HTML / CSS
Melijoe美国官网:法国奢侈童装购物网站
2017/04/19 全球购物
哈曼俄罗斯官方网上商店:Harman.club
2020/07/24 全球购物
毕业自荐信
2013/12/16 职场文书
党支部书记先进事迹
2014/01/17 职场文书
2016年大学生党员承诺书
2016/03/24 职场文书
tensorflow学习笔记之tfrecord文件的生成与读取
2021/03/31 Python
教你利用python实现企业微信发送消息
2021/05/23 Python
node.js如何自定义实现一个EventEmitter
2021/07/16 Javascript