python学习9—文件基本操作与高级操作
1. 文件基本操作
- 打开文件,获得文件句柄:f = open('filename',encoding='utf-8'),open会查询操作系统的编码方式,并按照该编码方式读取文件,若文件使用utf-8编码,则打开需指定编码
- 通过句柄对文件操作:data = f.read()
- 关闭文件:f.close()
2. 文件操作模式
- r,只读模式,不可写,f = open('filename','r',encoding='utf-8')
- f.readable()判断文件是否可读
- f.readline()读取文件中的一行,随着光标移动,依次读取各行
f = read('xxx') f.read() f.readline() #此处读取时,光标已经到文件最后,则此处读取的值为空
-
- f.readlines()读取所有行,并把每一行保存为一个字符串,所有行保存为列表
- open()包含参数newline,f=open('1.txt','r',newline=''),python会自动将不同平台的换行符号均转换为 ,在windows平台上,换行符为
- w,只写模式,不可读,f = open('filename','w',encoding='utf-8'),写入文件的内容必须是字符串
- 如果文件存在,则清空文件再进行后续操作
- 如果文件不存在,则会新建一个文件
- f.write('contents '),一行一行的将内容写入文件,从当前光标所在位置写入
- f.writelines(list),将内容写到一个列表里,在将列表里的各个元素分行写入文件中
- f.writeable(),判断文件是否可写
- x,只写模式,若文件不存在则创建该文件,若文件存在则报错
- a,追加模式,f = open('filename','a',encoding='utf-8')
- a模式本身就是写模式,只不过是采用追加的方式去写文件
- r+,读写模式,f = open('filename','r+',encoding='utf-8')
- w+,x+,a+,写读模式
- rb,wb,xb,ab,以字节的方式读写,不能指定编码
fr = open('TextFile1.txt','rb') print(fr.read().decode('gbk')) f = open('test22.py','wb') f.write(bytes('asdfghjkl ', encoding = 'utf8')) f.write('中文'.encode('utf8'))
注:从二进制转换为字符串显示为decode(),从字符串变为二进制存储为encode()
自动关闭文件的方式:
with open('file','w') as f: f.write('asdf') with open('file1','w') as f1, open('file2','w') as f2 f1.write('asdf') f2.write('ghjkl')
3. 文件操作方法
- f.closed,判断文件是否关闭
- f.encoding,显示文件打开的编码方式
- f.flush(),将内存中文本刷新到文件中,更新文件内容
- f.name,文件名
- f.tell(),显示当前光标所在位置,按照字节计数
- f.seek(0),将光标移动到0位置,按照字节计数
- f.read(4),按照字符计数,读取4个字符
- f.truncate(10),截取前10个字节,写入原本的文件,覆盖源文件
4. 文件高级操作
- f.seek(,0),0表示光标位置采用绝对位置
- f.seek(,1),要求文件以b模式打开,采用相对位置,累加
- f.seek(,2),采用倒序,以b模式打开,从文件末尾开始移动光标
- 循环文件的推荐方式:下面第一种方式读取所有文件内容,然后一行一行的循环;而第二种方式只是一行一行读取文件的内容
for i in f.readlines(): print(i) #推荐 for i in f: print(i)
5. 读取大文件最后一行
关键思想:每次增加从文件末尾读取字符串的个数,直到完全读取了最后一行,并用索引[-1]取出读取数据的最后一行。
for i in f: offs=-10 while True: f.seek(offs, 2) data=f.readlines() if len(data)>1: print('文件的最后一行是%s' %(data[-1]. decode('utf-8'))) break offs*=2