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 json encode datetime类型
Dec 28 Python
python通过yield实现数组全排列的方法
Mar 18 Python
利用Python绘制MySQL数据图实现数据可视化
Mar 30 Python
Python整型运算之布尔型、标准整型、长整型操作示例
Jul 21 Python
pandas 空的dataframe 插入列名的示例
Oct 30 Python
Python用字典构建多级菜单功能
Jul 11 Python
详解Python Qt的窗体开发的基本操作
Jul 14 Python
python计算n的阶乘的方法代码
Oct 25 Python
pytorch查看torch.Tensor和model是否在CUDA上的实例
Jan 03 Python
Python ORM框架Peewee用法详解
Apr 29 Python
使用keras内置的模型进行图片预测实例
Jun 17 Python
Python 数据的累加与统计的示例代码
Aug 03 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获取mysql数据库中的所有表名的代码
2011/04/23 PHP
50个PHP程序性能优化的方法
2014/06/02 PHP
PHP时间相关常用函数用法示例
2020/06/03 PHP
Extjs 3.3切换tab隐藏相应工具栏出现空白解决
2013/04/02 Javascript
javascript写的异步加载js文件函数(支持数组传参)
2014/06/07 Javascript
jquery判断checkbox是否选中及改变checkbox状态的实现方法
2016/05/26 Javascript
JavaScript用200行代码制作打飞机小游戏实例
2017/06/21 Javascript
vue父组件向子组件(props)传递数据的方法
2018/01/02 Javascript
详解各版本React路由的跳转的方法
2018/05/10 Javascript
Vue中错误图片的处理的实现代码
2019/11/07 Javascript
微信小程序加载机制及运行机制图解
2019/11/27 Javascript
JavaScript 闭包的使用场景
2020/09/17 Javascript
Webpack5正式发布,有哪些新特性
2020/10/12 Javascript
微信小程序基于ColorUI构建皮皮虾短视频去水印组件
2020/11/04 Javascript
python数据抓取分析的示例代码(python + mongodb)
2017/12/25 Python
Python之web模板应用
2017/12/26 Python
Django数据库类库MySQLdb使用详解
2019/04/28 Python
Python跑循环时内存泄露的解决方法
2020/01/13 Python
Django CBV模型源码运行流程详解
2020/08/17 Python
基于python的opencv图像处理实现对斑马线的检测示例
2020/11/29 Python
Python urlopen()参数代码示例解析
2020/12/10 Python
详解用selenium来下载小姐姐图片并保存
2021/01/26 Python
纯CSS3制作漂亮带动画效果的主机价格表
2015/04/25 HTML / CSS
英国最大的化装舞会服装网站:Fancydress.com
2017/08/15 全球购物
技术人员面试提纲
2013/11/28 职场文书
安全生产先进个人材料
2014/02/06 职场文书
刊首寄语大全
2014/04/11 职场文书
小学师德标兵先进事迹材料
2014/05/25 职场文书
计划生育宣传标语
2014/06/21 职场文书
主题团日活动总结
2014/06/25 职场文书
爱与责任师德演讲稿
2014/08/26 职场文书
2014物价局群众路线对照检查材料思想汇报
2014/09/21 职场文书
4S店客服专员岗位职责
2015/04/07 职场文书
罗马假日观后感
2015/06/08 职场文书
公司员工宿舍管理制度
2015/08/07 职场文书
求职自我评价参考范文
2019/05/16 职场文书