python之保留有限的历史记录(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行文本: 怎么办呢,
--------------------

"""

原文地址:https://www.cnblogs.com/zzy-9318/p/9839314.html

时间: 2024-10-16 08:05:45

python之保留有限的历史记录(collections.deque)的相关文章

使用deque保留有限的记录

# 使用deque保留有限的记录 >>> from collections import deque >>> q = deque(maxlen=3) # 指定队列的最大长度,若不指定,则长度不限 >>> q.append(1) >>> q deque([1], maxlen=3) >>> q.append(2) >>> q deque([1, 2], maxlen=3) >>> q

Python 学习日记第五篇 -- collections系列

一.计数器(counter) 计数器(counter)以字典的形式返回序列中各个字符出现的次数,值为key,次数为value #!/usr/bin/env python #-*- coding:utf-8 -*- #导入collections模块 import collections counter_test = collections.Counter("asfafjhadgkhjkgfjhgfjhaghdg") print(counter_test) #返回值 C:\Python27

collections.deque

d = collections.deque([])  # 创建双端队列d.append('a') # 在最右边添加一个元素,此时 d=deque('a')d.appendleft('b') # 在最左边添加一个元素,此时 d=deque(['b', 'a'])d.extend(['c','d']) # 在最右边添加所有元素,此时 d=deque(['b', 'a', 'c', 'd']) 原文地址:https://www.cnblogs.com/pjishu/p/10545734.html

用 Python 获取 B 站播放历史记录

用 Python 获取 B 站播放历史记录 最近 B 站出了一个年度报告,统计用户一年当中在 B 站上观看视频的总时长和总个数.过去一年我居然在 B 站上看了2600+个视频,总计251个小时,居然花了这么多时间,吓得我差点把 Bilibili App 卸载了... 然而我又很好奇,到底我在 B 站上都看了些什么类型小姐姐的视频,用几行 Python 代码实现了一下. 获取请求 Api 接口与 Cookie 实现起来非常容易,获取 cookie 模拟请求即可 使用 chrome 浏览器 登陆B

python获取火狐浏览器的历史记录

python获取火狐浏览器的历史记录 最新在学习python,所以想着做一些练手的项目,这里做一个获取火狐浏览器的历史记录,然后保存到一个txt文件中.这里涉及到的库: os sqlite3 time os库用来搜索文件,sqlite3用来读取sqlite文件,time用来转换时间戳使用. 火狐的历史记录是使用sqlite来保存的,Python内置sqlite3库,所以并不需要安装任何第三方库. 首先是查找火狐浏览器places.sqlite历史记录文件,这里使用了os.walk()函数来查找,

python collections deque

collections是python的高级容器类库,包含了dict.truple之外的常用容器. 下面介绍常用的deque 1. deque是双端队列,可以从两端塞元素进去,也可以从两端取元素. 2. deque是线程安全的,可以用来做多线程的共享资源,我也是因为这个开始接触duque的 >>> from collections import deque >>> a = [1, 2, 3, 4] 用列表初始化deque >>> deq = deque(

【Python模块学习】4、collections模块

collections是Python内建的一个集合模块,提供了许多有用的集合类. namedtuple() factory function for creating tuple subclasses with named fields deque list-like container with fast appends and pops on either end ChainMap dict-like class for creating a single view of multiple

Python其他数据结构collection模块-namtuple defaultdict deque Queue Counter OrderDict

nametuple 是tuple扩展子类,命名元组,其实本质上简单类对象 from collections import namedtuple info = namedtuple("Info", ['name', 'age', 'height']) # 赋值,是不是有点像面向对象中实例变量方式 info.name = "北门吹雪" info.age = 18 info.height = 175 # 访问 print(info.name) 其实本质上和下面方式一样 c

保存最后N个元素(collections.deque)

1.deque(maxlen=N)创建一个固定长度的队列,当有新的记录加入而队列已经满时,会自动移除老的记录(队列更加优雅和快速) 1 from collections import deque 2 q = deque(maxlen=3) 3 q.append(1) 4 q.append(2) 5 q.append(3) 6 q 7 deque([1, 2, 3], maxlen=3) 8 q.append(4) 9 q 10 deque([2, 3, 4], maxlen=3) 2.找到最大或