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浮点数的方法
Apr 18 Python
python实现复制整个目录的方法
May 12 Python
解读Python编程中的命名空间与作用域
Oct 16 Python
Python基于select实现的socket服务器
Apr 13 Python
python 爬虫 批量获取代理ip的实例代码
May 22 Python
python ChainMap的使用和说明详解
Jun 11 Python
PyQt5 QTable插入图片并动态更新的实例
Jun 18 Python
django做form表单的数据验证过程详解
Jul 26 Python
Python常用数据类型之间的转换总结
Sep 06 Python
python中p-value的实现方式
Dec 16 Python
python百行代码实现汉服圈图片爬取
Nov 23 Python
Python matplotlib 利用随机函数生成变化图形
Apr 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
一个目录遍历函数
2006/10/09 PHP
基于mysql的论坛(6)
2006/10/09 PHP
动态生成gif格式的图像要注意?
2006/10/09 PHP
《PHP边学边教》(02.Apache+PHP环境配置――上篇)
2006/12/13 PHP
输入值/表单提交参数过滤有效防止sql注入的方法
2013/12/25 PHP
抛弃 PHP 代价太高
2016/04/26 PHP
javascript写的一个链表实现代码
2009/10/25 Javascript
Javascript中的变量使用说明
2010/05/18 Javascript
25个非常棒的jQuery滑块插件和教程小结
2011/09/02 Javascript
Js判断参数(String,Array,Object)是否为undefined或者值为空
2013/11/04 Javascript
简单的Jquery遮罩层代码实例
2013/11/14 Javascript
使用原生js封装webapp滑动效果(惯性滑动、滑动回弹)
2014/05/06 Javascript
js中定义一个变量并判断其是否为空的方法
2014/05/13 Javascript
jquery文档操作wrap()方法实例简述
2015/01/10 Javascript
JavaScript使用pop方法移除数组最后一个元素用法实例
2015/04/06 Javascript
简介JavaScript中的unshift()方法的使用
2015/06/09 Javascript
jQuery使用cookie与json简单实现购物车功能
2016/04/15 Javascript
详解Vue基于 Nuxt.js 实现服务端渲染(SSR)
2018/04/05 Javascript
Vue+axios实现统一接口管理的方法
2018/07/23 Javascript
Angularjs之ngModel中的值验证绑定方法
2018/09/13 Javascript
Vue CLI3中使用compass normalize的方法
2019/05/30 Javascript
解决layui table表单提示数据接口请求异常的问题
2019/09/24 Javascript
python中字符串类型json操作的注意事项
2017/05/02 Python
深入flask之异步非堵塞实现代码示例
2018/07/31 Python
PyQt5实现五子棋游戏(人机对弈)
2020/03/24 Python
关于Python turtle库使用时坐标的确定方法
2020/03/19 Python
Django REST Framework 分页(Pagination)详解
2020/11/30 Python
详解CSS3+JS完美实现放大镜模式
2020/12/03 HTML / CSS
可能这些是你想要的H5软键盘兼容方案(小结)
2019/04/23 HTML / CSS
人事部主管岗位职责
2013/12/26 职场文书
学生会干部自荐信
2014/02/04 职场文书
缅怀革命先烈演讲稿
2014/05/14 职场文书
企业委托书范本
2014/09/13 职场文书
大学生职业生涯十年规划书范文
2014/09/17 职场文书
个人更名证明
2015/06/23 职场文书
「地球外少年少女」BD发售宣传CM公开
2022/03/21 日漫