python文件处理
(1)操作文件的流程:
#1. 打开文件,得到文件句柄并赋值给一个变量;#2. 通过句柄对文件进行操作;#3. 关闭文件
f=open('王强',encoding='utf-8') data=f.read() print(data) f.close()
open('王强',encoding='utf-8')就相当于文件句柄;'王强'是跟当前文件同属于一个目录下的文件名,相当于传入一个相对路径;
open()函数检索当前系统的编码,windows系统编码为GBK,故open函数默认以GBK的形式进行解码。以什么方式储存就以什么方式进行解码打开;
open默认打开的是只读模式
(2)文件处理读操作
r模式:只读
readable():判断文件是否只读,返回布尔值
f=open('王强','r',encoding='utf-8') data=f.read() print(data) print('第1行',f.readline(),end='')
#print('第1行',f.readline(),end=''):只读取一行,依次往下读,类似于光标的移动,readline一次,光标往下移动一行
readline每读取一行都会进行换行,有一行空内容,end=''可以取消换行
readlines():将文件中的内容全部读取并放在一个列表里面
f=open('王强',encoding='utf-8') data=f.readlines() print(data) f.close()
(3)文件写操作
w模式:只写
f=open('王强','w',encoding='utf8') f.write('11111111\n') #换行需要添加换行符 f.write('222222222\n') f.write('333\n4444\n555\n') f.close()
只写模式,如果文件存在会将文件内容清空,进行写下面的操作;如果文件不存在,会新建一个新文件
writable() :判断是否可写
writelines() :以列表的方式传入字符串内容
f=open('王强','w',encoding='utf8') f.writelines(['555\n','6666\n']) f.writelines(['555\n','6666\n',1]) f.close()
文件内容只能是字符串,只能写字符串
(4)文件追加操作
a模式:追加。实际上就是可写,只是不对文件内容做清空处理,以追加的模式写到文件最后
f=open('王强','a',encoding='utf-8') f.write('写到文件最后') close()
(5)文件处理b模式
rb:以二进制的方式进行读取,读取的结果是一堆二进制字节
f=open('test11.py','rb') data=f.read() print(data) print(data.decode('utf-8')) #再将字节以utf-8的方式解码成字符串 f.close()
运行结果为:b'11111\r\n22222\r\n33333\r\n44444
windows平台当中,回车是\r\n;b的方式不能指定编码
'字符串'---------encode---------》bytes;bytes---------decode---------》'字符串'
wb:以二进制字节的方式进行写入
f=open('test22.py','wb') f.write(bytes('1111\n',encoding='utf-8')) f.write('王强'.encode('utf-8')) #两种编码形式
ab:以二进制字节的方式进行写入文件的最后一个位置
(6)文件处理其他模式
r+:可读加可写
文件修改,实质上是对文件内容的覆盖
src_f=open('王强','r',encoding='utf-8') data=src_f.readlines() src_f.close() print(data) dst_f=open('王强','w',encoding='utf-8') dst_f.write(data[0]) dst_f.close()
命令相当于对‘王强’这个文件的内容进行修改,只保留第一行的内容
with:将文件句柄和变量进行合一,且不用关闭文件
src_f=open('xxx','r',encoding='gbk') dst_f=open('xxx','w',encoding='gbk')
若用with执行
with open('xxx','r',encoding='gbk') as src_f,\ open('xxx_new','w',encoding='gbk') as dst_f: data=src_f.read() dst_f.write(data)
(6)文件操作的其他方法
encoding():获取open打开的编码,不是文件的存入编码
flush():将内存的数据保存到硬盘中
read():读取文件内容
tell():文件中光标所在位置,windows中换行符为\r\n占两个字符
newline='':读取文件中真正的换行符
f=open('b.txt','r+',encoding='utf-8',newline='') ,此时读取的换行符为\r\n;若不加newline='',读取的换行符则为\n
seek():控制光标的移动,默认从文件的起始位置计算
truncate():文件截断,把截断范围外的内容全都删去了
对于文件中光标的移动规则:
一:read(3):
1. 文件打开方式为文本模式时,代表读取3个字符
2. 文件打开方式为b模式时,代表读取3个字节
二:其余的文件内光标移动都是以字节为单位如seek,tell,truncate
注意:
1. seek有三种移动方式0,1,2,其中1(相对上一次光标的位置seek)
和2(倒着seek,显示光标以后的所有内容)必须在b模式下进行,但无论哪种模式,都是以bytes为单位移动的
2. truncate是截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,所以truncate要在r+或a或a+等模式下测试效果
(7)读取大文件中的最后一行
f=open('日志文件','rb') 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
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步