Python-文件操作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python-文件操作相关的知识,希望对你有一定的参考价值。

文件操作

技术图片

open() 函数有三个参数: 第一个是文件名字(相对路径)、第二个是模式,模式有 r(只读)、w(写)、a(追加模式)、还有 r+可读可写 、w+可写可读、a+可追加可读 ,第三个是编码,文件存在硬盘实际都是以二进制形式存储,所以不管写和读都要编码解码。*open()方法默认是以系统的编码方式打开*(windows:GBK 、Linux:UTF-8)

文件修改操作,其实本质就是先文件内容加载到内存,然后修改内存里的内容,再覆盖源文件,所以 用 写模式(w)操作文件要小心,因为覆盖。

ff.read() 是把文件所有一起读出来

技术图片

ff.readline()是一行一行的读文件:

技术图片

ff.readlines() 是把所有文件内容读出来,以列表(list)形式打包:

技术图片

ff.flush() 刷新。写数据的时候,程序没运行完,数据不会更新到文件上,这个函数可以在程序没运行完的时候 同步到文件。

技术图片

文件处理b模式

技术图片

b模式就是以原生二进制方式读取文件内容。用了b模式不能在代码里指定编码。

打开文件的模式有(默认为文本模式):
r ,只读模式【默认模式,文件必须存在,不存在则抛出异常】
w,只写模式【不可读;不存在则创建;存在则清空内容】
a, 之追加写模式【不可读;不存在则创建;存在则只追加内容】

#2. 对于非文本文件,只能使用b模式,"b"表示以字节的方式操作(而所有文件也都是以字节的形式存储的,使用这种模式无需考虑文本文件的字符编码、图片文件的jgp格式、视频文件的avi格式)
rb
wb
ab
注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码

windows平台回车换行有两个字符 \r \n 如下图:

技术图片

b模式下还原字符串,打印的时候加解码:

技术图片

b模式写入数据:

ff.write(‘此情无计可消除\n‘.encode(‘utf-8‘))

ff.write(bytes(‘雁字回时,月满西楼\n‘,encoding=‘utf-8‘))

技术图片

tell() 方法是捕获光标位置,readlines方法全部内容读完,光标在22位置,一个汉字占3个字节,加上回车键两个字节(\r\n),这里没显示\r是因为python自动优化了,加上newline=‘‘就可以看到。

技术图片

文件内光标移动

一: read(3):

  1. 文件打开方式为文本模式时,代表读取3个字符

  2. 文件打开方式为b模式时,代表读取3个字节

二: 其余的文件内光标移动都是以字节为单位如seek,tell,truncate

注意:

  1. seek有三种移动方式0,1,2,其中1和2必须在b模式下进行,但无论哪种模式,都是以bytes为单位移动的

  2. truncate是截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,所以truncate要在r+或a或a+等模式下测试效果

下图 ff.seek(1) 代表光标移动1个字节,由于文档开头是汉字,一个汉字占三个字节,这相当于在一个汉字中间开始读起,那就报错。

技术图片

seek() 有3个参数 :第一个参数 代表 是移动光标 多少个字节。 第二个参数默认是0,可以输入1,代表是每次移动光标都以当前位置为基础再移动,如下图:

技术图片

注:要用后面两个参数,打开文件必须以b模式

使用第三个参数,表示倒序移动光标,如图:

技术图片
倒序要用负数,参数为2

ff.read(4) 表示读4个字符 (read() 方法是以字符为单位读取)

ff.truncate(14) 表示截取14个字节,注意:任何模式都可以使用 ,除了 w 或者 w+ 模式 ,因为 w模式打开文件就会覆盖为空。

以上是关于Python-文件操作的主要内容,如果未能解决你的问题,请参考以下文章

学习笔记:python3,代码片段(2017)

常用python日期日志获取内容循环的代码片段

VSCode自定义代码片段——git命令操作一个完整流程

使用 Python 代码片段编写 LaTeX 文档

VSCode自定义代码片段15——git命令操作一个完整流程

VSCode自定义代码片段15——git命令操作一个完整流程