Python之文件处理
一、文件处理流程
1.打开文件,得到文件句柄并赋值给一个变量
2.通过句柄对文件进行操作
3.关闭文件
示例:
f = open('可能否_a','a',encoding='utf-8') f.write('文本追加在最后') f.write('\n写在最后一行') f.close()
### 为了方便 不每次都需要使用 f.close() 函数,一般使用如下形式打开文件 ###
with open('可能否_a','a',encoding='utf-8') as f: f.write('文本追加在最后') f.write('\n写在最后一行')
或
import configparser config = configparser.ConfigParser() config.read("example.ini") # 阅读文件 example.ini config.write(open('example_new.ini','w')) # 将修改的内容放在 example_new.ini 中 # 直接写 open('example_new.ini','w') 不用 f = 它的时候,是可以不用加上 f.close() 命令的
二、文件打开模式
打开文件的模式有:
* r ,只读模式【默认模式,文件必须存在,不存在则出现异常】
* w ,只写模式【不可读,不存在则创建,存在则清空内容】
* x ,只写模式【不可读,不存在则创建,存在则报错】
* a ,追加模式【可读,不存在则创建,存在则值追加内容】
“” + “”表示可以同时读写某个文件
* r+ ,读写【可读,可写】
* w+ ,写读【可读,可写】
* x+ ,写读【可读,可写】
* a+ ,写读【可读,可写】
示例
f = open('可能否_w','r+',encoding='utf-8') f.write('abcd') #只将第一行对应的位置的字符串替换成所要替换的字符串 f.close()
“” b “”表示以字节的方式操作
* rb 或 r + b
* wb 或 w + b
* xb 或 w + b
* ab 或 a + b
注:以b方式打开时,读取到的内容是字节类型,写入时也要提供字节类型,不能指定编码
例如:
f = open('test.py','rb') #b的方式不能指定编码
三、文件内置函数 flush
flush原理:
1.文件操作是通过软件将文件从硬盘读取到内存
2.写入文件的操作也都是存入内存缓冲去buffer(内存速度快与硬盘),如果写入文件的数据从内存刷到硬盘,内存与硬盘的速度延迟会被无限放大,效率变低,所以要刷到硬盘的数据我们统一往内存的一小块空间即buffer中放,一段时间后操作系统会将buffer中数据一次性刷到硬盘
3.buffer即 ,强制将写入的数据刷到硬盘、
flush作用:
在使用Python编辑文件时,文件内容会被保存在内存中,在这时打开文件是无法看到文件内容的变动的,需要执行一次flush(),Python才会将编辑在内存的内容更新到硬盘中,这时才能在打开文件后看到文件内容的变动
示例:
四‘文件内光标移动
注意:read(3) 代表读取3个字符,其余的文件内光标移动都是以字节为单位如 seek,tell,read,truncate
五、文件内置函数 tell
作用:显示光标所在位置
字节数:一个中文字为三个字节,换行符为一个字节,一个字母为一个字节
示例:
文本内容:
代码内容:
输出结果
六、文件内置函数 seek(x,y)
作用:控制光标的移动
使用示例:
*****第一种模式*****
# 光标默认从文本开头开始
# 默认情况下,y 为 0(一般不用输入,只需知道它称为模式 0 )
文本内容:
代码:
输出:
*****第二种模式*****
# 必须要文件是以 b 的方式打开
# 根据相对位置(即上一个光标所移动到的位置),对光标进行移动
# y 为 1 (称为模式 1 )
文本内容:
代码:
输出:
*****第三种模式*****
# 必须要文件是以 b 的方式打开
# 根据相对位置(即上一个光标所移动到的位置),对光标进行移动
# y 为 2 (称为模式 2 )
# 使用案例:日志文件
文本内容:
代码:
输出:
七、文件内置函数 truncate(x)
作用:文件截断(从文件开头一直到第x个位置截断输出)(即将文件只保留从0到x个字节的内容)
注意:文件必须以写方式打开,但不能再 ‘w+’ 或 ‘w’ 的打开方式 下使用
示例:
原文本:
代码:
输出:、
执行代码后的文本:
八、循环文件的推荐方式
with open('日志文件','rb') as f: for i in f: # 这样子也是一行一行的取值,而不是先在内存中存一大段东西