python b包_Python 模块B

本文详细介绍了Python中的包、时间模块time、datetime、操作系统交互模块os、与Python解释器交互的sys模块、数据存储模块json和pickle、加密模块hashlib和hmac,以及日志记录模块logging的使用。通过实例展示了如何操作文件、时间转换、序列化和反序列化、密码加密以及日志记录等常见功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

​包可以把一个模块分成多个文件同样的导入方式即可,用了包之后导入方式不变,使用者感觉不到变化。包其实是一个文件夹(必须得含有__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:\Users\oldboy\Desktop\atm\log

print(logfile_dir)

logfile_name = 'log.log' # log文件名,需要自定义路径名

# *****

# 如果不存在定义的日志目录就创建一个

if not os.path.isdir(logfile_dir): # C:\Users\oldboy\Desktop\atm\log

os.mkdir(logfile_dir)

# log文件的全路径

logfile_path = os.path.join(logfile_dir, logfile_name) # C:\Users\oldboy\Desktop\atm\log\log.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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值