猪行天下之Python基础——10.1 Python常用模块(上)(二)

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 内容简述: 1、time和datetime模块 2、logging模块 PS:如果你想搜索安装某个模块或者发布一个自己的模块可以到移步到:pypi.org/

④ 一些实用的代码片段


下面提供一些很实用的代码片段,用到的时候复制粘贴即可:


import datetime
import time
now = datetime.datetime.now()
# 获得当前时间的前/后几天,几小时,几秒,毫秒
# 如果是想获得时间戳可以直接调用int(time.mktime(求出来的时间.timetuple()))
def fetch_before_time(time_type, value, strf="%Y-%m-%d %H:%M:%S"):
    if time_type == 'days':
        if value > 0:
            return (datetime.datetime.now() + datetime.timedelta(days=value)).strftime(strf)
        else:
            return (datetime.datetime.now() - datetime.timedelta(days=value)).strftime(strf)
    elif time_type == 'hours':
        if value > 0:
            return (datetime.datetime.now() + datetime.timedelta(hours=value)).strftime(strf)
        else:
            return (datetime.datetime.now() - datetime.timedelta(hours=value)).strftime(strf)
    elif time_type == 'seconds':
        if value > 0:
            return (datetime.datetime.now() + datetime.timedelta(seconds=value)).strftime(strf)
        else:
            return (datetime.datetime.now() - datetime.timedelta(seconds=value)).strftime(strf)
    elif time_type == 'microseconds':
        if value > 0:
            return (datetime.datetime.now() + datetime.timedelta(microseconds=value)).strftime(strf)
        else:
            return (datetime.datetime.now() - datetime.timedelta(microseconds=value)).strftime(strf)
# 获得第二天凌晨的时间戳
def fetch_morning_timestamp():
    return int(time.time()) + (144000 - (int(time.time())) % 86400)
# 构造一个由起始事件到结束时间间所有的日期列表
def init_date_list(begin_date, end_date):
    date_list = []
    begin_date = datetime.datetime.strptime(str(begin_date), "%Y%m%d")
    end_date = datetime.datetime.strptime(str(end_date), "%Y%m%d")
    while begin_date <= end_date:
        date_str = begin_date.strftime("%Y%m%d")
        date_list.append(date_str)
        begin_date += datetime.timedelta(days=1)
    return date_list
if __name__ == '__main__':
    print("当前时间:", datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
    print(fetch_before_time('days', 3))
    print(fetch_before_time('hours', -3))
    print(fetch_before_time('seconds', 3))
    print("第二天早上的时间戳:", fetch_morning_timestamp())
    print("从20190101到20190301的日期列表:%s" % init_date_list(20190101, 20190301))


运行结果如下


当前时间: 2019-03-14 15:44:58
2019-03-17 15:44:58
2019-03-14 18:44:58
2019-03-14 15:45:01
第二天早上的时间戳: 1552665600
从20190101到20190301的日期列表:['20190101', '20190102',...过长省略... '20190226', '20190227', '20190228', '20190301']


2、logging日志模块


大部分的程序都会有「记录运行日志的需求」,而日志信息一般有这样几类:正常的程序运行日志调试错误或警告信息的输出等。而日常开发中我们需要把日志持久化到本地,进行一些观察和统计,错误排查等,如果只用print函数输出的话,显然有点捉襟见寸。在Python内置了一个日志模块:logging,它提供了标准的日志接口,支持日志分级和存储


① 日志分级


在开始正式学习logging前,我们先了解下「日志分级」,即:什么时候用什么等级的日志。如下表所示:


级别 建议什么时候使用
DEBUG 详细的信息,常用于问题诊断
INFO 记录关键节点信息,用于确认程序是否按照预期运行
WARNING 程序还是正常运行,但某些不期望的事情发生时记录的信息(如磁盘可用空间较低)
ERROR 由于更严重的问题导致某些功能不能正常运行时记录的信息
CRITICAL 发生严重错误,导致程序不能继续运行时记录的信息


打印各种级别的代码示例如下:


import logging
if __name__ == '__main__':
    # 获得一个Logger
    logger = logging.getLogger("Test")
    # logging提供的简单的配置方法,自行配置的话需要手动添加handler
    logging.basicConfig()
    # 设置输出的log级别(大于或等于此级别的才会输出),默认级别Warning
    logger.setLevel(logging.INFO)
    logger.debug("=== Debug 级别的信息 ===") # 不会输出
    logger.info("=== Info 级别的信息 ===")
    logger.warning("=== Warning 级别的信息 ===")
    logger.error("=== Error 级别的信息 ===")
    logger.critical("=== Critical 级别的信息 ===")


运行结果如下


INFO:Test:=== Info 级别的信息 ===
WARNING:Test:=== Warning 级别的信息 ===
ERROR:Test:=== Error 级别的信息 ===
CRITICAL:Test:=== Critical 级别的信息 ===


② 将日志写入到文件


日志默认是输出到Console(屏幕)上,如果我们想把详细的日志输出到log文件里,则需要用到handler了,理论上可以把日志输出到各种流中stderr文件socket等都可以,在logging中已经将各种流handler封装好了,你也可以继承StreamHandler类自己做一些定制,简单的把日志写入到文件中的代码示例如下:


import logging
if __name__ == '__main__':
    logger = logging.getLogger("Test")
    logger.setLevel(logging.INFO)
    # 输出到控制台
    logger.addHandler(logging.StreamHandler())
    # 输出到文件
    logger.addHandler(logging.FileHandler('test.log', encoding='UTF-8'))
    logger.debug("=== Debug 级别的信息 ===")
    logger.info("=== Info 级别的信息 ===")
    logger.warning("=== Warning 级别的信息 ===")
    logger.error("=== Error 级别的信息 ===")
    logger.critical("=== Critical 级别的信息 ===")


运行结果如下(同时在目录下生成了一个test.log的文件):


=== Info 级别的信息 ===
=== Warning 级别的信息 ===
=== Error 级别的信息 ===
=== Critical 级别的信息 ===


嗯,你可能有这样的需求,Console打印Warning以上的日志,而log文件保存Debug级别以上的日志,那么可以修改下上面的代码,修改后的代码如下:


if __name__ == '__main__':
    logger = logging.getLogger("Test")
    logger.setLevel(logging.INFO)
    # 输出到控制台
    s_handler = logging.StreamHandler()
    s_handler.setLevel(logging.WARNING)
    logger.addHandler(s_handler)
    # 输出到文件
    f_handler = logging.FileHandler('test.log', encoding='UTF-8')
    f_handler.setLevel(logging.DEBUG)
    logger.addHandler(f_handler)
    logger.debug("=== Debug 级别的信息 ===")
    logger.info("=== Info 级别的信息 ===")
    logger.warning("=== Warning 级别的信息 ===")
    logger.error("=== Error 级别的信息 ===")
    logger.critical("=== Critical 级别的信息 ===")


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
7天前
|
Python
在Python中,可以使用内置的`re`模块来处理正则表达式
在Python中,可以使用内置的`re`模块来处理正则表达式
19 5
|
17天前
|
Java 程序员 开发者
Python的gc模块
Python的gc模块
|
20天前
|
数据采集 Web App开发 JavaScript
python-selenium模块详解!!!
Selenium 是一个强大的自动化测试工具,支持 Python 调用浏览器进行网页抓取。本文介绍了 Selenium 的安装、基本使用、元素定位、高级操作等内容。主要内容包括:发送请求、加载网页、元素定位、处理 Cookie、无头浏览器设置、页面等待、窗口和 iframe 切换等。通过示例代码帮助读者快速掌握 Selenium 的核心功能。
62 5
|
23天前
|
Python
SciPy 教程 之 SciPy 模块列表 6
SciPy教程之常量模块介绍:涵盖公制、二进制(字节)、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率及力学单位。示例展示了角度单位转换为弧度的几个常用常量。
18 7
|
23天前
|
Python
SciPy 教程 之 SciPy 模块列表 7
`scipy.constants` 模块提供了常用的时间单位转换为秒数的功能。例如,`constants.hour` 返回 3600.0 秒,表示一小时的秒数。其他常用时间单位包括分钟、天、周、年和儒略年。
17 6
|
21天前
|
Python
SciPy 教程 之 SciPy 模块列表 13
SciPy教程之SciPy模块列表13:单位类型。常量模块包含多种单位,如公制、二进制(字节)、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。示例代码展示了如何使用`constants`模块获取零摄氏度对应的开尔文值(273.15)和华氏度与摄氏度的转换系数(0.5556)。
17 1
|
22天前
|
XML 前端开发 数据格式
超级详细的python中bs4模块详解
Beautiful Soup 是一个用于从网页中抓取数据的 Python 库,提供了简单易用的函数来处理导航、搜索和修改分析树。支持多种解析器,如 Python 标准库中的 HTML 解析器和更强大的 lxml 解析器。通过简单的代码即可实现复杂的数据抓取任务。本文介绍了 Beautiful Soup 的安装、基本使用、对象类型、文档树遍历和搜索方法,以及 CSS 选择器的使用。
52 1
|
22天前
|
Python
SciPy 教程 之 SciPy 模块列表 9
SciPy教程之常量模块介绍,涵盖多种单位类型,如公制、质量、角度、时间、长度、压强等。示例展示了如何使用`scipy.constants`模块查询不同压强单位对应的帕斯卡值,包括atm、bar、torr、mmHg和psi。
14 1
|
23天前
|
Python
SciPy 教程 之 SciPy 模块列表 8
SciPy教程之常量模块单位类型介绍。该模块包含多种单位,如公制、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。示例展示了部分长度单位的转换值,例如英寸、英尺、海里等。
14 1
|
24天前
|
知识图谱 Python
SciPy 教程 之 SciPy 模块列表 5
本教程介绍SciPy常量模块中的单位类型,涵盖公制、质量、时间、长度等单位。示例代码展示了如何使用`scipy.constants`模块获取不同质量单位的千克值,如公吨、磅、盎司、原子质量单位等。
15 1