文件处理的byte模式
f=open('test2.py')函数默认是‘rb’模式,即为读取模式;
#读取一个byte模式的文件 rb
f=open('test2.py','rb')#前提是存在这个可操作的对象 data=f.read() print(data)#打印出来的是byte二进制的模式; print(data.decode('utf-8'))#按照utf-8进行编码后的打印 f.close()
#byte模式写入文档内容的操作 wb
f=open('test2.py','wb') f.write(bytes('aaaa ',encoding='utf-8'))#方法一 f.write('山东省'.encode('utf-8'))#方法二
#byte模式追加文档内容的操作 ab
f=open('test2.py','ab') f.write('泰安市'.encode('utf-8'))
#文件拷贝工具 rb+wb
with open('test2.py','rb') as f1,open('test3.py','wb') as f2: res = f1.read() f2.write(res)
w模式下while循环读文件,readline(一次只能读一行)
with open(r'g.txt',mode='rt',encoding='utf-8') as f: res1=f.readline() res2=f.readline() print(res2) #使用while循环读取 while True: line=f.readline() if len(line) == 0: break print(line)
b模式下,一次性多行读写。存为列表形式。readlines
with open(r'g.txt',mode='rt',encoding='utf-8') as f: res=f.readlines() print(res)
read是按照文件内容直接读出,readlines是将文件内容以列表的形式读出
了解:
with open('../../../../Desktop/Python课堂笔记/day12笔记/h.txt', mode='wt', encoding='utf-8') as f: print(f.readable()) 判断文件是否可读 print(f.writable()) 判断文件是否可写 print(f.encoding) 格式,如‘utf-8,’如果文件打开属性为b,则没有该属性 print(f.name) 输出绝对路径 print(f.closed) 判断文件是否关闭
f.closed
f.encoding
f.flush #立即写入硬盘
f.tell # 获取文件指针当前位置
f.readlines
f.seek #指针的移动,使用b的方式操作
模式0,即b=0,参照物是文件开头位置,
模式1,即b=1,参照物是当前指针位置,
模式2,即b=2,参照物是文件结尾
f.truncate #截断
练习:
实现动态时刻更新日志的效果
import time with open('acess.log',mode='rb')as f: f.seek(0,2) while 1: line = f.readline() if len(line) ==0: time.sleep(0.3) else: print(line.decode('utf-8'),end=)
使用seek移动光标读取文件最后一行内容
f= open('test2.py','rb') for i in f: offset = -2 n = 0 while True: f.seek(offset,2) #移动光标到倒数第‘offest’个字节 lis = f.readlines()#读取当前光标下,后续的数行内容,输出为列表 if len(lis) >1:#判断当前读取出的列表长度是否是大于1 print('最后一行内容是:',lis[-1].decode('utf-8'))#打印最后一行内容 break else: offset*=2 #光标距离最后一个位置自增2倍