文件处理
一、文件处理流程
1.打开文件,得到句柄并赋值给一个变量
2.通过句柄对文件操作
3.关闭文件
二、基本操作流程
f=open('a.txt') first_line=f.readline() print('first line:',first_line) data=f.read() print(data)
三、文件打开模式
打开文件时,需要指定文件以某种模式打开,打开后即可获得文件的句柄,再通过文件句柄对文件进行操作。
文件打开有四种模式'a','r','w','b'
'r'只读模式,默认模式。
'w'只写模式,如果文件存在,则清空。
'a'追加模式【可读; 不存在则创建;存在则只追加内容】
'b'以字节表示
"+" 表示可以同时读写某个文件
- r+, 读写【可读,可写】
- w+,写读【可读,可写】
- a+, 写读【可读,可写】
注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码
四、文件内光标移动
一: 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+等模式下测试效果
五、open函数详解
1.open 语法
open(file[, mode[, buffering[, encoding[, errors[, newline[, closefd=True]]]]]])
open函数有很多的参数,常用的是file,mode和encoding
file文件位置,需要加引号
mode文件打开模式,见下面3
buffering的可取值有0,1,>1三个,0代表buffer关闭(只适用于二进制模式),1代表line buffer(只适用于文本模式),>1表示初始化的buffer大小;
encoding表示的是返回的数据采用何种编码,一般采用utf8或者gbk;
errors的取值一般有strict,ignore,当取strict的时候,字符编码出现问题的时候,会报错,当取ignore的时候,编码出现问题,程序会忽略而过,继续执行下面的程序。
newline可以取的值有None,
,
, ”, ‘
',用于区分换行符,但是这个参数只对文本模式有效;
closefd的取值,是与传入的文件参数有关,默认情况下为True,传入的file参数为文件的文件名,取值为False的时候,file只能是文件描述符,什么是文件描述符,就是一个非负整数,在Unix内核的系统中,打开一个文件,便会返回一个文件描述符
六、上下文管理
with open('a.txt','r',encoding='utf-8') as f1, open('b.txt','w',encoding='utf-8') as f2: data=f1.read() f2.write(data)
七、文件修改
文件的修改实质上是文件的替换。
import os with open('a.txt','r',encoding='utf-8') as read_f, open('.a.txt.swap','w',encoding='utf-8') as write_f: for line in read_f: if line.startswith('hello'): line='哈哈哈 ' write_f.write(line) os.remove('a.txt') os.rename('.a.txt.swap','a.txt')