python之保留有限的歷史記錄(collections.deque)
阿新 • • 發佈:2018-10-24
完美 檢查 簡單 pre from 史記 功能 pat tor 保存有限的歷史記錄collections.deque的完美應用場景,例如下面的代碼對一段文本做簡單的文本匹配處理,當發現有匹配的時就輸出當前的匹配行,
1、deque(maxlen=N)創建一個固定長度的隊列,當有新的記錄加入而隊列已經滿時,會自動移除老的記錄.
from collections import deque q = deque(maxlen=3) q.append(1) q.append(2) q.append(3) q deque([1, 2, 3], maxlen=3) q.append(4) q deque([2, 3, 4], maxlen=3)
應用功能:
保存有限的歷史記錄collections.deque的完美應用場景,例如下面的代碼對一段文本做簡單的文本匹配處理,當發現有匹配的時就輸出當前的匹配行,
以及最後檢查過的N行文本
from collections import deque def search(lines, pattern, history=5): previous_lines = deque(maxlen=history) #collection.deque : deque (maxlen=N)創建了一個固定長度的隊列,當有新的隊列已滿時會自動移除最老的那條記錄 # deque([], maxlen=5) 創建一個隊列 for line in lines: print(‘當前要匹配行:‘, line) if pattern in line:yield line, previous_lines # previous: deque([‘python1\n‘, ‘python2\n‘, ‘怎麽辦呢,\n‘], maxlen=5) if __name__ == ‘__main__‘: with open(‘somefile.txt‘) as f: for line, previous in search(f, ‘python‘, 5): # 調用search函數,每次yield當前匹配的文本和最後匹配檢查過的N行文本 print(‘line:‘,line,‘previous:‘,previous) for pline in previous: print(‘最後匹配檢查過的N行文本:‘,pline, end=‘‘) print(‘-‘ * 20) """ somefile.txt文本內容: python1 python2 怎麽辦呢, 失效一處python3。 輸出: 當前要匹配行: python1 line: python1 previous: deque([], maxlen=5) -------------------- 當前要匹配行: python2 line: python2 previous: deque([‘python1\n‘], maxlen=5) 最後匹配檢查過的N行文本: python1 -------------------- 當前要匹配行: 怎麽辦呢, 當前要匹配行: 失效一處python3。 line: 失效一處python3。 previous: deque([‘python1\n‘, ‘python2\n‘, ‘怎麽辦呢,\n‘], maxlen=5) 最後匹配檢查過的N行文本: python1 最後匹配檢查過的N行文本: python2 最後匹配檢查過的N行文本: 怎麽辦呢, -------------------- """
python之保留有限的歷史記錄(collections.deque)