python 过滤

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
'''
 
filter: 过滤符合条件的可迭代序列
         1.参数1: 函数 或 lambda表达式
         2.参数2: 可迭代序列
 
'''
 
#函数: 过滤大于60分
def  greater_than_60(x):
     return  x > =  60
 
scores  =  [ 88 , 67 , 95 , 58 , 86 , 99 , 43 , 66 ]
results  =  filter (greater_than_60, scores)
print ( list (results))     #[88, 67, 95, 86, 99, 66]
 
#lambda表达式:
names  =  [ 'Tom' 'Jerry' 'Marry' ]
#过滤: 遍历列表names, 将每个列表元素保存在str_name中, 如果符合'r' in str_name条件, 则返回str_name
#      最终将所有符合条件的元素过滤出来.
result  =  filter ( lambda  str_name:  'r'  in  str_name, names)
print ( list (result))  #['Jerry', 'Marry']

打印结果:
[88, 67, 95, 86, 99, 66]
['Jerry', 'Marry']

标签:  Python
### Python实现日志过滤功能 在Python中,`logging`库提供了强大的日志记录能力,其中包括日志过滤的功能。通过自定义过滤器(Filter),可以灵活控制哪些日志消息会被处理或忽略。 #### 自定义过滤器类 可以通过继承 `logging.Filter` 类并重写其 `filter` 方法来创建自定义过滤器。该方法接收一个 `LogRecord` 对象作为参数,并返回布尔值以决定是否保留此条日志[^2]。 以下是实现自定义过滤器的一个示例: ```python import logging class CustomFilter(logging.Filter): def __init__(self, param=None): super().__init__() self.param = param def filter(self, record): # 只允许包含特定字符串的日志通过 if self.param is not None and self.param in record.msg: return True return False ``` #### 配置Logger对象应用过滤器 一旦定义好过滤器,就可以将其添加到任何处理器(Handler)、记录器(Logger)或者两者之上。下面展示如何将上述自定义过滤器应用于 Logger 中: ```python # 创建logger实例 logger = logging.getLogger('custom_logger') logger.setLevel(logging.DEBUG) # 定义格式化器 formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') # 创建StreamHandler并将格式化器绑定上去 stream_handler = logging.StreamHandler() stream_handler.setFormatter(formatter) # 添加自定义过滤器至handler my_filter = CustomFilter(param="important") stream_handler.addFilter(my_filter) # 将handler加入logger logger.addHandler(stream_handler) # 测试日志输出 logger.info("This is a normal message") # 被过滤掉 logger.info("This is an important message") # 输出这条日志 ``` 在这个例子中,只有当消息内容包含单词 `"important"` 的时候才会被打印出来[^2]。 #### 结合Fluentd进行高级日志管理 如果希望进一步扩展系统的可维护性和性能表现,则可以考虑引入像 Fluentd 这样的工具来进行集中式的日志管理和分析工作。此时可以从 Python 应用程序向 Fluentd 发送结构化的 JSON 数据流,在服务端完成更复杂的筛选逻辑[^1]。 例如利用官方支持的 fluent-logger-python 库可以直接把带有标签的消息推送到远程服务器上的 Fluentd 实例里去: ```bash pip install fluent-logger ``` 然后编写如下推送代码片段: ```python from fluent import sender def send_to_fluentd(tag, data_dict): try: sender.setup('app', host='localhost', port=24224) sender.emit(tag, data_dict) except Exception as e: print(f"Error sending to Fluentd: {e}") if __name__ == "__main__": test_data = {"level": "INFO", "msg": "An example of structured log"} send_to_fluentd('application.log', test_data) ``` 这样不仅简化本地存储压力还能充分利用后台强大查询统计优势[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值