首页 > 编程语言 >晓晓---python文件的读写模式的理解

晓晓---python文件的读写模式的理解

时间:2022-09-06 11:57:23浏览次数:68  
标签:文件 ---- 晓晓 seek 写入 模式 --- python open

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----示例错误代码来源

 



标签:文件,----,晓晓,seek,写入,模式,---,python,open
From: https://www.cnblogs.com/renjie1105/p/16661027.html

相关文章

  • 力扣636(java)-函数的独占时间(中等)
    题目:有一个单线程CPU正在运行一个含有n道函数的程序。每道函数都有一个位于 0和n-1之间的唯一标识符。函数调用存储在一个调用栈上:当一个函数调用开始时,它......
  • Android系统属性-Settings.system和SystemProperties
    Android系统属性-Settings.system和SystemPropertiesJava代码--应用层方法:SystemProperties.get或者SystemProperties.set如果属性名称以“ro.”开头,那么这个属性被视......
  • Python-注解-类型注解
    类型注解的作用Python是动态语言,其显著特点是在声明变量时,你不需要显式声明它的类型。程序运行时会推断出变量age是int类型但是:如果你代码某些变量的类型有错,编辑器......
  • 微星智控 - 群控软件
    前言我们专注于移动互联网的发展,在移动端长达8年的技术积累,作为目前国内技术应用型智控企业,拥有强大的技术研发团队,业界先进的安卓群控技术、自动化测试、安卓视频镜像......
  • 使用vue-cli3离线创建项目
    第一步:下载vue-templates/webpack 地址https://github.com/vuejs-templates/webpack 第二步:将下载包解压到本地用户目录下的.vue-templates目录下并将webpack-devel......
  • idea中application.yml文件配置git的https连接报cannot open git-upload-pack错误
    如下图 git连接方式为https方式,访问仓库内的某个文件时报cannotopengit-upload-pack错误 解决方法 在idea的设置中找到图中的选项选中即可......
  • 复习python基础
    ......
  • 01-linux基础命令
    1、常用命令常用Linux命令的基本使用序号命令对应英文作用01lslist查看当前目录下的内容02pwdprintworkingderectory查看当前所在文件夹03cd[目录......
  • jQuery-强大的jQuery选择器 (详解)
    jq除常用的选择写法之外的更多方法记录。原文:jQuery-强大的jQuery选择器(详解)[转]1.基础选择器 Basics名称说明举例#id根据元素Id选择$("divId")选择ID......
  • python中的map函数
    python中的map函数1map()函数的简介以及语法:map是python内置函数,会根据提供的函数对指定的序列做映射。map()函数的格式是:map(function,iterable,...)第一个参数接受一......