Python 分析访问细节

Python 分析访问细节,下面介绍两个分析函数,并使用它们来过滤和分析各个AccessDetails对象。第一个filter()函数只传递特定路径。第二个函数会汇总每个不同路径的出现频次。

下面定义一个小函数book_in_path(),并结合内置的filter()函数,用于分析细节。复合的book_filter()函数如下所示:

from typing import Iterable, Iterator
def book_filter(
        access_details_iter: Iterable[AccessDetails]
    ) -> Iterator[AccessDetails]:
    def book_in_path(detail: AccessDetails) -> bool:
        path = tuple(
            item
            for item in detail.url.path.split('/')
            if item
        )
        return path[0] == 'book' and len(path) > 1
    return filter(book_in_path, access_details_iter)

这样就通过book_in_path函数定义了一条规则,并将其应用于每个AccessDetails对象。如果路径名非空,且路径的一级属性是book,那么我们会对这些对象感兴趣,其他所有AccessDetails对象都会被静默排除。

我们最感兴趣的是reduce_book_total()归约函数,如下所示:

from collections import Counter
def reduce_book_total(
        access_details_iter: Iterable[AccessDetails]
    ) -> Dict[str, int]:
    counts: Dict[str, int] = Counter()
    for detail in access_details_iter:
        counts[detail.url.path] += 1
    return counts

该函数会生成一个Counter()对象,用于显示AccessDetails对象中每个路径出现的频率。可以使用reduce_total(book_filter(details))方法关注某组的特定路径,它汇总了给定过滤器可接收的数据项。

由于Counter对象适用于各类型,因此需要类型提示来缩小类型范围。在本例中,类型提示是Dict[str, int],它会告知mypy工具统计路径的字符串表示形式。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程