晓晓---python文件的读写模式的理解
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文件的读写模式的理解的更多相关文章
- python文件的读写的模式
<1>打开文件 在python,使用open函数,可以打开一个已经存在的文件,或者创建一个新文件 open(文件名,访问模式) 示例如下: f = open('test.txt', 'w' ...
- Python文件的读写操作
Python文件的使用 要点:Python能够以文本和二进制两种形式处理文件. 1.文件的打开模式,如表1: 注意:使用open()函数打开文件,文件使用结束后耀使用close()方法关闭,释放文件 ...
- python文件的读写总结
读写文件是最常见的IO操作.Python内置了读写文件的函数,用法和C是兼容的. 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘, ...
- python—— 文件的打开模式和文件对象方法 & os、os.path 模块中关于文件、目录常用的函数使用方法
引用自“鱼c工作室” 文件的打开模式和文件对象方法 : https://fishc.com.cn/forum.php?mod=viewthread&tid=45279&ext ...
- python文件的读写权限以及相关应用read、write和文件指针
f=open('ceshi.txt','a',encoding='utf-8')r=open('ceshi.txt','r',encoding='utf-8')上面的2种写法可以用with来写:wit ...
- [ Python ] 文件的读写操作
1. 文件读写操作 读写文件是最常见的 IO 操作, Python 内置了读写文件的函数.在磁盘上读写文件的功能是由操作系统提供的,所以读写文件是请求操作系统打开一个文件对象(通常称为文件描述符),然 ...
- Python文件的读写
一.写数据 f = open("hello.txt", "w") f.write("hello world python!") f.clos ...
- 【8】python文件的读写方法
(1).读文件的步骤: (1)打开文件 open(path,flag,encoding,[errors]) path:打开路径 flag:打开方式 r(只读) rb(二进制格式) r+(可以读写) w ...
- python文件的读写追加等操作
# encoding:utf-8 # 文件读取操作 fp=open("E:\\file.txt","r",encoding="utf-8" ...
- 第9.9节 Python文件随机读写定位操作方法seek
类似于C语言,Python也提供了文件位置定位的操作方法seek. 一. 语法 seek(offset, whence=SEEK_SET) 语法释义: 1)offset :将文件当前操作位置移动偏移量 ...
随机推荐
- [EULAR文摘] 肢端MRI能否在未分化关节患者中甄别出RA患者
标签: EULAR文摘; 未分化关节炎; 病程演变; MRI;早期诊断 肢端MRI能否在未分化关节患者中甄别出RA患者 Nieuwenhuis WP, et al. EULAR 2015.Presen ...
- VS Ctrl+D 快速复制上一行
打开 VS 工具-->选项-->环境-->键盘 选择默认值,确定. 搞定!
- PostGIS之空间投影
1. 概述 PostGIS 是PostgreSQL数据库一个空间数据库扩展,它添加了对地理对象的支持,允许在 SQL 中运行空间查询 PostGIS官网:About PostGIS | PostGIS ...
- Integer使用==比较的问题
Integer使用==比较的问题 new一个对象 public Integer(int value) { this.value = value; } 自动装箱 public static Intege ...
- 通过手动创建hibernate工厂,自动生成表,完成数据库备份还原功能
最近做toB.toG业务,普遍要去适配各种国产数据库,所以不得不用hibernate,过去这么多年一直都是用mybatis+mysql,现在重拾hibernate,专注跨数据库,感兴趣的加关注. 需求 ...
- 记一次hooks陷阱
今天写一个hook,正想发挥hooks这种高级复用方式来缩短我的开发时间,就出现了一个新bug. 我编写的这个hook用于管理数据列表状态.除了导出内部的状态外,还导出一些方法供外部调用.代码简化如下 ...
- Vue项目安装less和less-loader
第一步: 查看webpack和webpack-cli是否安装打开cmd,通过命令查看 webpack -v webpack-cli -v 如果没有安装,要先进行安装 可以通过 npm view web ...
- classmethod 修饰符
title: Python classmethod 修饰符 author: 杨晓东 permalink: classmethod date: 2021-10-02 11:27:04 categorie ...
- HashMap排序题
HashMap排序题 题目 已知一个 HashMap<Integer,User>集合, User 有 name(String)和 age(int)属性. 请写一个方法实现对HashMap ...
- Python爬取亚马逊商品页面
仍然利用Requests库来实现 1 import requests 2 r=requests.get('https://www.amazon.cn/gp/product/B01M8L5Z3Y') 3 ...