Python文件读写w+和r+区别解析

作者:Python热爱者 时间:2022-01-12 04:23:04 

其实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+的写也是覆盖的!

来源:https://blog.51cto.com/14246112/2461867

标签:Python,文件,读写,w+,r+
0
投稿

猜你喜欢

  • javascript中利用柯里化函数实现bind方法【推荐】

    2024-05-02 17:29:26
  • PyTorch Dataset与DataLoader使用超详细讲解

    2021-05-12 16:43:43
  • php 无限级 SelectTree 类

    2024-05-13 09:25:03
  • Python编程使用tkinter模块实现计算器软件完整代码示例

    2022-07-17 06:31:07
  • Go中的条件语句Switch示例详解

    2024-05-09 10:11:25
  • SQL Server利用sp_spaceused如何查看表记录存在不准确的情况

    2024-01-20 07:40:10
  • golang实现数组分割的示例代码

    2024-05-08 10:23:41
  • python生成带有表格的图片实例

    2023-05-22 03:30:16
  • Python 数据类型--集合set

    2021-11-23 21:17:54
  • keras分类模型中的输入数据与标签的维度实例

    2022-01-30 02:12:43
  • 整理Python中的赋值运算符

    2021-10-30 16:25:21
  • Python实现设置windows桌面壁纸代码分享

    2022-03-23 03:52:46
  • 深入了解Python的异常处理机制

    2023-09-03 09:25:41
  • 简单介绍Python中的JSON模块

    2023-12-30 00:16:29
  • 远古幻想ICON 1套+创作思路

    2007-09-30 20:33:00
  • 原生js实现的贪吃蛇网页版游戏完整实例

    2024-04-10 16:12:21
  • Python时间和日期库的实现

    2022-02-22 14:48:28
  • 详解ASP.NET Core中间件Middleware

    2024-05-09 09:05:15
  • SQL 多条件查询几种实现方法详细介绍

    2024-01-16 23:12:31
  • 在Django中实现添加user到group并查看

    2021-12-08 21:47:07
  • asp之家 网络编程 m.aspxhome.com