一.文件处理流程
1 f= open('test', encoding='utf-8')#1.文件不指定处理模式,默认只读2.注意指定文件编码格式,不指定默认系统编码 2 data=f.read() 3 print(data) 4 f.close() #打开文件一定要记得关闭 5 **注意以上两点
因为文件打开时,容易忘记关闭。有种不用自己写关闭的方法,可以自己关闭文件:
1 with open('test','r',encoding='utf-8') as f: 2 print(f.read())
二.文件处理模式
1.读操作
文件格式:
1 aaaa 2 bbbb 3 cccc
常用方法1:
1 f= open('test','r', encoding='utf-8')
2 print(f.readable()) #判断是否可读
3 print(f.readline()) #有一次读取一行
4 print(f.readline(),end='') #取消换行
5 print(f.readline())
打印结果:
1 True 2 aaaa 3 4 bbbb 5 cccc
6
常用方法2:
readlines()方法,读取文件存放到列表里f= open('test','r', encoding='utf-8')
data=f.readlines()
print(data)
打印结果:
['aaaa ', 'bbbb ', 'cccc']
2.w写操作
文件存在,会清空文件
文件不存在,会新建文件
1 f= open('test','w', encoding='utf-8')
2 print(f.writable()) #判断是否可写
3 f.write('11111111
')
4 f.write('333
4444
555
')
5 f.writelines(['555
','6666
']) # 文件内容只能是字符串,只能写字符串
6 f.close()
文件效果:
1 11111111 2 333 3 4444 4 555 5 555 6 6666 7
3.a 追加操作
f= open('test','a', encoding='utf-8')
f.write('这是最后一行')
4.其他文件处理操作
r+ 可读可写
w+ 可写可读 #会清空文件
a+ 读和追加
文件在硬盘上储存,本质上没有修改,只有覆盖,修改是在内存中进行。
模拟修改文件的过程:
先取到内存里,在进行修改,最后覆盖到硬盘上。
1 q_f=open('test','r',encoding='utf-8') #取文件 2 data=q_f.readlines() 3 q_f.close() 4 5 for i in data: #读取修改文件 6 print(i) 7 print(data) 8 d_f=open('test','w',encoding='gbk') #存文件 9 d_f.write(data[0]) 10 d_f.close()
三.文件处理b模式
1.rb读取,在进行解码
1 f=open('test','rb') #b的方式不能指定编码,b模式指定二进制字节 2 data=f.read() 3 print(data) 4 print(data.decode('utf-8')) 5 f.close()
打印结果:
b'ddddd
'
ddddd
2.wb以及ab写入,通过指定编码方式写入字节对象
1 f=open('test2.py','wb') 2 f.write(bytes('1111 ',encoding='utf-8')) #写入方式一 3 f.write('技艺'.encode('utf-8')) #写入方式二 4 5 f=open('test2.py','ab') 6 f.write('坏蛋'.encode('utf-8'))
四。其它操作方法
1 f=open('test2.py','r+',encoding='utf-8',newline='') #默认把 读取成 .读取文件中真正的换行符号 2 f.closed #判断是否关闭 3 f.encoding #文件打开的解码方式 4 f.flush() #保存(刷新) 5 f.tell() #按照字节判断光标移动位置 6 f.read(3) #按照字符读取 7 f.truncate(4) #按照字节截取文件,如果字节数不恰好是断点处,文件会显示乱码 8 f.seek() #设置光标位置,从零开始 9 f.seek(10,1)#1为正向读取,接着当前位置向下 10 f.seek(-10,2) #2为倒着读,而且只能在rb模式下进行
五。读取最后一行日志方法
1 f=open('日志文件','rb') 2 for i in f: 3 offs=-10 4 while True: 5 f.seek(offs,2) 6 data=f.readlines() 7 if len(data) > 1: 8 print('文件的最后一行是%s' %(data[-1].decode('utf-8'))) 9 break 10 offs*=2