標籤:
open 遍曆一個大記錄檔
使用 readlines() 還是 readline() ?
總體上 readlines() 不慢於python 一次次調用 readline(),因為前者的迴圈在C語言層面,而使用readline() 的迴圈是在Python語言層面。
但是 readlines() 會一次性把全部資料讀到記憶體中,記憶體佔用率會過高,readline() 每次唯讀一行,對於讀取 大檔案, 需要做出取捨。
如果不需要使用 seek() 定位位移, for line in open(‘file‘) 速度更佳。
使用 readlines(),適合量級較小的記錄檔
1 import os 2 import time 3 4 def check(): 5 p = 0 6 while True: 7 f = open("log.txt", "r+") 8 f1 = open("result.txt", "a+") 9 f.seek(p, 0)10 11 #readlines()方法12 filelist = f.readlines()13 if filelist:14 for line in filelist:15 #對行內容進行操作16 f1.write(line)17 18 #擷取當前位置,為下次while迴圈做位移19 p = f.tell()20 print ‘now p ‘, p21 f.close()22 f1.close()23 time.sleep(2)24 25 if __name__ == ‘__main__‘:26 check()
使用 readline(),避免記憶體佔用率過大
1 import os 2 import time 3 4 def check(): 5 p = 0 6 while True: 7 f = open("log.txt", "r+") 8 f1 = open("result.txt", "a+") 9 f.seek(p, 0)10 11 #while readline()方法12 while True:13 l = f.readline()14 15 #空行同樣為真16 if l:17 #對行內容操作18 f1.write(l)19 else:20 #擷取當前位置,作為位移值21 p = f.tell()22 f.close()23 f1.close()24 break25 26 print ‘now p‘, p27 time.sleep(2)28 29 30 if __name__ == ‘__main__‘:31 check()
python 即時遍曆記錄檔