文件操作part3 文件內指針的移動
阿新 • • 發佈:2018-09-21
下使用 port code mod Coding while \n 字節數 bsp
大前提:文件內指針移動是以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 下雨了\n‘%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=‘‘)
文件操作part3 文件內指針的移動