首页 > 解决方案 > 在 Python 中记录可重复的操作

问题描述

在 Python 3.6 中工作,我想记录可重复的操作,而不需要从函数代码中对记录器进行过多的调用。最好有一个自动选项,以便在函数内的每一行代码评估之后吐出一个日志。那可能吗?

以下是过滤数据之类的最小可重现示例:

# Import libraries
import pandas as pd
import numpy as np
import logging

# Set up the logger and a dummy data frame
logger = logging.getLogger()
logger.setLevel(logging.INFO)

dummy_df = pd.DataFrame({
    'col_A': np.arange(1, 1000, 1),
    'col_B': np.arange(1001, 2000, 1)
})

# Subset rows of the dataframe
logging.info("There are {} rows remaining".format(dummy_df.shape[0]))

# Removing values A below 15
dummy_df = dummy_df.loc[dummy_df['col_A'] > 15]
logging.info("There are {} rows remaining".format(dummy_df.shape[0]))

# Removing values B below 1500 and above 1600
dummy_df = dummy_df.loc[(dummy_df['col_B'] > 1500) & (dummy_df['col_B'] < 1600)]
logging.info("There are {} rows remaining".format(dummy_df.shape[0]))

问题是我必须为基本相同的操作编写对记录器的可重复调用。

标签: pythonpython-3.xlogging

解决方案


假设条件是如此不同,以至于不可能有一个过滤器功能随着过滤器条件的变化而变化。

# Import libraries
import pandas as pd
import numpy as np
import logging

# Set up the logger and a dummy data frame
logger = logging.getLogger()
logger.setLevel(logging.INFO)

dummy_df = pd.DataFrame({
    'col_A': np.arange(1, 1000, 1),
    'col_B': np.arange(1001, 2000, 1)
})

def filter1(df):
    return df.loc[df['col_A'] > 15]

def filter2(df):
    return df.loc[(df['col_B'] > 1500) & (df['col_B'] < 1600)]

filters = (filter1, filter2)

logging.info("There are {} rows remaining".format(dummy_df.shape[0]))
for my_filter in filters:
    dummy_df = my_filter(dummy_df)
    logging.info("There are {} rows remaining".format(dummy_df.shape[0]))

您可以根据需要添加任意数量的过滤器


推荐阅读