1. python读取文件模式的自我理解:

'r' open for reading (default)----只读模式打开文件,不能写;
'w' open for writing, truncating the file first ----只写模式打开文件,不能读,并且每次写的时候都会清空之前的部分;
'x' create a new file and open it for writing----只写模式,文件不存在则会创建文件,如果文件已经存在则会报错;
'a' open for writing, appending to the end of the file if it exists---只写模式打开文件,并且是追加,就是每次写入
都会在原来文件的基础上增加----追加追加追加;该模式下,f.seek()方法对写不生效,即使移动至文档开头,再写入时还是会追加在末尾;
'b'       binary mode ----读写的时候是二进制不是文本模式,二进制就是读写的是字节码,不需要编码格式之类的,必须和上边的 r w x a 组合使用
't' text mode (default) -----文本读写模式,这个主要是和二进制的模式相对应的,默认情况下都是文本模式,与二进制相对,可以不写
'+' open a disk file for updating (reading and writing) ----打开文件需要同时读写时,但是该模式必须和上边的 r w x a 组合使用

'U' universal newline mode (deprecated)----已经弃用了,别看了

2. 这些模式到底哪些可以组合在一起
看完了之后呢,这些模式根据功能可以划分为三组(r w x a) , ( b t), (+ ),其中(r w x a)---主模式,就是你给模式赋值时这四种里边至少需要包含一种,
如果你需要二进制r,w,
x a ---默认为文本模式读写,二进制模式读写,------rb,wb,ab,xb, 如果需要在这些主模式的情况下,加上读或者写的功能,可以改为 r+,w+,x+,a+
r,rb,rb+,rt,rt+
w,wb,wt=w+,wb+,wt+
...
其他模式组合类似

3. 各种模式组合在一起之后到底表示什么意思
r+----该模式下可读可写,此时如果不移动文件指针,写入的时候是从文件的开头写入的,写入时是覆盖了之前的内容的,比如你原本文件里边的内容是:123杨洋,如果你写入你好帅,
那这时候文件的内容变为:你好帅杨洋;如果你通过f.seek(0,2)移动文件指正至文件末尾,再写入的时候,则是追加;

w+---写入文件,每次都是把之前的文件内容全部清空然后写入最新的;

a+---可读可写,该模式下写入的时候始终是追加在末尾,通过f.seek()方法移动指针再写入也是会追加在末尾;
4. 如我我想在文件的开头插入内容,怎么做?
在文件的开头插入内容,1)需要先把之前的文件的内容给读出来 2)然后把文件清空 3)然后写入你要插入的内容 4)然后再把之前的内容给写入;
下边是列出的各种错误的实现模式供你对照下看下踩坑踩到哪里了

很多代码看似正确,但是其实都是错的。一起来看下这些代码


1、看似正确的错误代码1


with open(path, "r+") as f:


f.seek(0)


f.write(data)


确实是从头写了,而且有些原有数据确实在,但是数据有问题。。。。


因为”r+”方式写文件操作没有插入的语义,只有写文件的含义,原来位置如果有数据,不会后移的,是覆盖掉了。。。。所以,你可能会看到一些老的数据。

不仔细辨别可能就天真地以为成功了。。。


2、看似正确的错误代码2


with open(path, "w+") as f:


old = f.read()


f.seek(0)


f.write(data)


f.write(old)


你读取到的数据永远为空。。。。


因为”w+”的含义就是截取长度为0然后写入文件。


3、看似正确的错误代码3


with open(path, "a+") as f:


old = f.read()


#f.truncate(0) #取消掉注释成正确代码


f.seek(0)


f.write(data)


写入的数据永远出现在文件末尾。。。。。


要打破魔咒的话要先将文件截断成0字节。。。。


snack:想要”a+”的效果变”r+”,在读之前先seek(0),在写之前要truncate一下,确保要写入的位置是文件的末尾。


正确的代码


with open(path, "r+") as f:


old = f.read()


f.seek(0)


f.write(data)


f.write(old)


原理思路:读出原有文件内容,移动索引到开始,写入新的数据,然后写入旧的数据。
————————————————
版权声明:本文为CSDN博主「weixin_39701861」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_39701861/article/details/111458704----示例错误代码来源

 


晓晓---python文件的读写模式的理解的更多相关文章

  1. python文件的读写的模式

    <1>打开文件 在python,使用open函数,可以打开一个已经存在的文件,或者创建一个新文件 open(文件名,访问模式) 示例如下: f = open('test.txt', 'w' ...

  2. Python文件的读写操作

    Python文件的使用 要点:Python能够以文本和二进制两种形式处理文件. 1.文件的打开模式,如表1:  注意:使用open()函数打开文件,文件使用结束后耀使用close()方法关闭,释放文件 ...

  3. python文件的读写总结

    读写文件是最常见的IO操作.Python内置了读写文件的函数,用法和C是兼容的. 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘, ...

  4. python—— 文件的打开模式和文件对象方法 & os、os.path 模块中关于文件、目录常用的函数使用方法

    引用自“鱼c工作室”     文件的打开模式和文件对象方法  : https://fishc.com.cn/forum.php?mod=viewthread&tid=45279&ext ...

  5. python文件的读写权限以及相关应用read、write和文件指针

    f=open('ceshi.txt','a',encoding='utf-8')r=open('ceshi.txt','r',encoding='utf-8')上面的2种写法可以用with来写:wit ...

  6. [ Python ] 文件的读写操作

    1. 文件读写操作 读写文件是最常见的 IO 操作, Python 内置了读写文件的函数.在磁盘上读写文件的功能是由操作系统提供的,所以读写文件是请求操作系统打开一个文件对象(通常称为文件描述符),然 ...

  7. Python文件的读写

    一.写数据 f = open("hello.txt", "w") f.write("hello world python!") f.clos ...

  8. 【8】python文件的读写方法

    (1).读文件的步骤: (1)打开文件 open(path,flag,encoding,[errors]) path:打开路径 flag:打开方式 r(只读) rb(二进制格式) r+(可以读写) w ...

  9. python文件的读写追加等操作

    # encoding:utf-8 # 文件读取操作 fp=open("E:\\file.txt","r",encoding="utf-8" ...

  10. 第9.9节 Python文件随机读写定位操作方法seek

    类似于C语言,Python也提供了文件位置定位的操作方法seek. 一. 语法 seek(offset, whence=SEEK_SET) 语法释义: 1)offset :将文件当前操作位置移动偏移量 ...

随机推荐

  1. Vulhub 漏洞学习之:Redis

    Vulhub 漏洞学习之:Redis 1 Redis简介 Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库.Redis 与其他 key - value 缓存产品 ...

  2. Binary &Op是什么

    前言 在并行开发时我们经常会用到Pstream::gather()函数或是全局函数reduce()或者其他,需要输入参数Binary &Op,本篇主要讨论Binary &Op是什么 t ...

  3. dotnet总结——类型系统

    包括2种大的类型: 引用类型和值类型, 放一张图说明继承层次: 一 值类型: 内置的值类型,如下 用户自定义值类型就是用户定义的枚举或者结构类型. 可空类型(Nullable<T>)属于 ...

  4. 使用 UnoCSS shortcuts 简化 class

    UnoCSS 确实简化了不少样式书写.也降低了 CSS 打包体积,提升了样式使用率.但样式太多的话,class 也写得多,比较费眼.所幸,UnoCSS 提供了 shortcuts 来简化 class, ...

  5. QFileDialog实现同时选择文件和文件夹,确认取消按钮英文问题解决方法

    如下图所示,需求是同时能够选择文件或者文件夹,但是QFileDialog文件窗口类要么只能选文件,要么只能选文件夹,无法同时去选择文件和文件夹: 要实现这样的需求,封装了一个类,实现同时选择文件和文件 ...

  6. 【PyQt5学习-03-】PyQt5 控件概念

    快速开发:先看控件的功能,再根据需要选学 1.什么是控件 程序界面上的元素 各自独立 一块矩形区域 具有的功能 接收用户输入 用户点击 显示内容 放置其他控件 先学常用控件 基础控件 按钮 输入控件 ...

  7. 在IIS上同站点部署多个程序操作步骤

    1.打开IIS管理器: 2.右击选中"网站",选择"添加网站":输入网站名称.路径.IP地址等信息: 3.确定后并访问网站: 部署后可能会因为框架不支持导致报错 ...

  8. SpringMVC请求与响应

    请求 知识点1:@RequestParam 名称 @RequestParam 类型 形参注解 位置 SpringMVC控制器方法形参定义前面 作用 绑定请求参数与处理器方法形参间的关系 相关参数 re ...

  9. System.IO.FileNotFoundException: Could not load file or assembly 'System.IO.Compression.FileSystem系统找不到指定的文件

    错误:System.IO.FileNotFoundException: Could not load file or assembly 'System.IO.Compression.FileSyste ...

  10. 自定义Ribbon负载均衡

    需要在基包的上一级定义,不然会被扫到如:com.cn.me,要和me同级 然后自定义两个类 DshzsRandomRule类写自己定义的算法,DshzsRule写注入的bean import com. ...