控制檔案內指標移動——打day10
強調:只有t模式下read(n),n代表字元個數,除此以外都是以位元組為單位
with open('a.txt',mode='rt',encoding='utf-8')as f:
res=f.read(4)#列印後面的字元
print(res)
結果:你好啊h
with open('a.txt',mode='rb')as f:
res=f.read(3)
peint(res.decode('utf-8))
結果:你
with open('a.txt',mode='at',encoding='utf-8') as f:
f.truncate(3)
只保留 truncate (3)之前的資料,之後的都刪除掉,只能以字元控制
f.seek():指標移動是以位元組為單位的
三種模式:
只有0模式既可以在t下用也可以在b下用,而1、2兩種模式只能在b模式下使用
0(預設的):參照檔案開頭
with open('a.txt',mode='rt',encoding='utf-8')as f:
f.seek(3,0)
print(f.tell())#檢視檔案指標當前所在的位置
print(f.read())
結果:
3
好啊hello
1: 參照指標當前所在位置
with open('a.txt',mode='rb') as f:
f.read(2)
f.seek(4,1)
print(f.tell())#檢視檔案指標當前所在的位置
print(f.read().decode('utf-8'))
結果:
6
啊hello
2: 參照檔案末尾
with open('a.txt',mode='rb') as f:
f.seek(-5,2)
print(f.tell())#檢視檔案指標當前所在的位置
print(f.read().decode('utf-8'))
結果:
9
hello
後臺監視小程式
import time#呼叫時間模組
with open('access.log',mode='rb') as f:
f.seek(0,2)#跳到檔案末尾
while True:
line=f.readline()#每次讀取一行
if len(line) == 0:#如果line的長度為0的話
time.sleep(0.1)#停0.1秒
else:
print(line.decode('utf-8'),end='')#否者把他的內容打印出來