1. 程式人生 > >python之保留有限的歷史記錄(collections.deque)

python之保留有限的歷史記錄(collections.deque)

完美 檢查 簡單 pre from 史記 功能 pat tor

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)