控制文件指针移动

with open('a.txt',mode='rt',encoding='utf-8')as f:
    res=f.read(4)
    print(res)

 

强调:只有t模式下read(n)中的n表示的是字符个数,其他都是以字节为单位。

with open('a.txt',mode='rb')as f:
    res=f.read(3)
    print(res.decode('utf-8'))

 

f.seek():指针移动    以字节为单位

三种模式:

  • 0(默认):参照文件开头
  • 1                :参照指针当前位置
  • 2                :参照文件末尾

I 0模式:参照文件开头

      只有0模式既可在t下用也可在b模式下用。1.2只能在b模式下用

with open('a.txt',mode='rt',encoding='utf-8') as f:
    f.seek(3, 0)
    print(f.tell()) #显示指针位置
    print(f.read())
#参照文件开头指针位置向后移动3个字节

 

II 1模式:参照指针当前位置

with open('a.txt',mode='rb')as f:
    f.read(3) #先读三个字节,指针移动到3
    f.seek(3, 1)#1以指针当前位置再移动3位
    print(f.read().decode('utf-8'))

 

III 2模式:参照文件末尾

with open('a.txt',mode='rb')as f:
    f.seek(-5,2) #参照文件末尾,指针移动到-5
    print(f.tell())
    print(f.read().decode('utf-8'))

 

小练习:

写一个程序监测文件中新增内容:

with open('access.log',mode='at',encoding='uft-8')as f:
    f.write('时间  内容 登陆名\n')  #先写一个程序:该程序就是被监测程序
import time  #导入时间模块,刷新时间
with open('access.log',mode='rb')as f:
    f.seek(0, 2)  #将指针移到文件末尾
    while True:   #循环一行行读取文件
        line = f.readline()
        if len(line) == 0:#判断文件长度是否为0,为0表示文件未写入
            time.sleep(1)
        else:#如果有文件写入则会打印
            print(line.decode('utf-8'), end='')