Python之文件处理

一.文件处理流程  

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
 
全面发展
原文地址:https://www.cnblogs.com/snowony/p/11795560.html