大前提:文件内指针移动是以Bytes为单位的,唯独在唯独在t模式下的read读取内容的个数是以字符为单位的
t模式下读取文件:
with open('a.txt',mode='rt',encoding='utf-8') as f: data=f.read(3)#读取的是三个字符 print(data) with open('a.txt',mode='rb') as f: data=f.read(3)#读取的是三个Bytes print(data.decode('utf-8'))
f.seek(指针移动的字节数,模式控制): 控制文件指针的移动
参数二:
0: 默认的模式,该模式代表指针移动的字节数是以文件开头为参照的
1: 该模式代表指针移动的字节数是以当前所在的位置为参照的
2: 该模式代表指针移动的字节数是以文件末尾的位置为参照的
强调:其中0模式可以在t或者b模式下使用,而1跟2模式只能在b模式下使用
f.tell() 返回现在指针距离当前文件开头的位置
0模式的详解:
t模式下:
with open('a.txt',mode='rt',encoding='utf-8') as f: f.seek(4,0)#从开头移动了四个字节 print(f.tell()) print(f.read())
b模式下:
with open('a.txt',mode='rb') as f: # f.seek(4,0) f.seek(2,0) print(f.tell()) print(f.read().decode('utf-8'))#字节读取不完整,不能使用utf-8解码报错
1模式的详解(只能在b模式下)
with open('a.txt',mode='rb') as f: f.seek(3,1)#从当前位置移动三个字节(当前位置是文件开头) print(f.tell()) f.seek(4,1)#(从上次指针位置移动4个字节) print(f.tell()) print(f.read().decode('utf-8'))
2模式详解
with open('a.txt',mode='rb') as f: f.seek(-9,2)#从文件末尾,向前移动9个字节 data=f.read() print(data.decode('utf-8'))
实现文件新写入文件监控;
run.py 添加文件内容
import time with open(r'b.txt',mode='a',encoding='utf-8') as f: f.write('%s 下雨了 '%time.strftime('%Y-%m-%d %X'))
检测.py 检测
with open(r'b.txt',mode='rb') as f: f.seek(0,2)#指针移动到最后 while True:#读取指针后一行的内容 line = f.readline() if len(line)==0: continue else: print(line.decode('utf-8'),end='')