zoukankan      html  css  js  c++  java
  • Python 模块B

    ​ 包可以把一个模块分成多个文件同样的导入方式即可,用了包之后导入方式不变,使用者感觉不到变化。包其实是一个文件夹(必须得含有__init__.py 这个文件)

    ​ 导包就是导入init

    ​ 包的文件以执行文件的环境变量为基准,包的init只能从包名开始导入

    time模块

    ​ 支持三种不同形式(时间戳、格式化时间和结构化时间)的时间,不同形式的时间之间可以转换。

    ​ 重点记住time.time()(时间戳,打印从1970到现在的时间,秒数)和time.sleep()(系统睡眠一段时间)这两个方法

    datatime模块

    ​ 对时间进行修改

    os模块

    ​ 与操作系统交互,可以操控文件,主要是针对文件的操作

    ​ 重点记住os.listdir(path)(可以列出所有文件)、os.path.join(pathA, pathB)(可以把pathA和pathB两个路径拼接起来)、os.path.abspath(__file__)(打印当前路径)、os.path.dirname()(打印父目录)和os.walk(path) # 返回三个值,第一个值是路径;第二个值是路径下的文件夹,第三个值是路径下的文件

    sys模块

    ​ 与python解释器进行交互

    json模块

    ​ 主要用于数据存储,可以跨平台,主要记住序列化和反序列化

    ​ 序列化:从python的字典(最常用)变成json串,json.dump()(序列化到内存)

    ​ 反序列化:从json串变成python的字典(最常用),json.load(从内存中获取json串)

    ​ 字典中的字符串都用双引号

    pickle模块

    ​ 可以序列化python中的所用对象(数据类型),但是无法跨平台,也是用到dump和load两个方法

    hashlib模块和hmac模块

    ​ 用于密码加密,摘要算法,无论丢什么字符,都会返回一个固定长度的字符串。前者用m = hashlib.md5() m.update(b'123456')print(m.hexdigest())打印一个固定长度的值,且可以拼接123和456,输出值一样;后者用m = hmac.new(b'abc') # 对称密码算法中的密钥 m.update(b'123456')print(m.hexdigest())使用不同的密钥字符串可以输出不同的字符串

    logging模块

    ​ 用于记录日志,写法比较固定

    import os
    import logging.config
    
    # 定义三种日志输出格式 开始
    standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' 
                      '[%(levelname)s][%(message)s]'  # 其中name为getLogger()指定的名字;lineno为调用日志输出函数的语句所在的代码行
    simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'
    id_simple_format = '[%(levelname)s][%(asctime)s] %(message)s'
    # 定义日志输出格式 结束
    
    # ********
    logfile_dir = os.path.dirname(os.path.abspath(__file__))  # log文件的目录,需要自定义文件路径 # atm
    logfile_dir = os.path.join(logfile_dir, 'log')  # C:UsersoldboyDesktopatmlog
    print(logfile_dir)
    logfile_name = 'log.log'  # log文件名,需要自定义路径名
    # *****
    
    # 如果不存在定义的日志目录就创建一个
    if not os.path.isdir(logfile_dir):  # C:UsersoldboyDesktopatmlog
        os.mkdir(logfile_dir)
    
    # log文件的全路径
    logfile_path = os.path.join(logfile_dir, logfile_name)  # C:UsersoldboyDesktopatmloglog.log
    print('logfile_path:',logfile_path)
    # 定义日志路径 结束
    
    # log配置字典
    LOGGING_DIC = {
        'version': 1,
        'disable_existing_loggers': False,
        'formatters': {
            'standard': {
                'format': standard_format
            },
            'simple': {
                'format': simple_format
            },
        },
        'filters': {},  # filter可以不定义
        'handlers': {
            # 打印到终端的日志
            'console': {
                'level': 'DEBUG',
                'class': 'logging.StreamHandler',  # 打印到屏幕
                'formatter': 'simple'
            },
            # 打印到文件的日志,收集info及以上的日志
            'default': {
                'level': 'INFO',
                'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件
                'formatter': 'standard',
                'filename': logfile_path,  # 日志文件
                'maxBytes': 1024 * 1024 * 5,  # 日志大小 5M  (*****)
                'backupCount': 5,
                'encoding': 'utf-8',  # 日志文件的编码,再也不用担心中文log乱码了
            },
        },
        'loggers': {
            # logging.getLogger(__name__)拿到的logger配置。如果''设置为固定值logger1,则下次导入必须设置成logging.getLogger('logger1')
            '': {
                # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
                'handlers': ['default', 'console'],
                'level': 'DEBUG',
                'propagate': False,  # 向上(更高level的logger)传递
            },
        },
    }
    
    
    def load_my_logging_cfg():
        logging.config.dictConfig(LOGGING_DIC)  # 导入上面定义的logging配置
        logger = logging.getLogger(__name__)  # 生成一个log实例
        logger.info('It works!')  # 记录该文件的运行状态
    
        return logger
    
    
    if __name__ == '__main__':
        load_my_logging_cfg()
    
  • 相关阅读:
    数据结构做题一些总结
    ExecuteNoQuery执行, 报错“go”附近有语法错误。
    EF总结
    哨兵模式
    Redis 发布订阅
    Redis 持久化
    Redis 事务 和乐观锁
    缓存穿透和雪崩
    Redis 基础知识
    Redis 三种特殊的数据类型
  • 原文地址:https://www.cnblogs.com/michealjy/p/11365322.html
Copyright © 2011-2022 走看看