标签:file_path bsp col format icc 常用 use 日志输出 ica
一、包
1.1 研究模块与包。还可以站在另外角度分析不同的问题
1.模块的开发者
2.模块的使用者
一系列模块文件的结合体,改文件内部通常会有一个__init__.py
包的本质还是一个还是一个模块
1.2 from dir.dir1 import p
首次导入包:
先产生一个执行文件的名称空间。
1.创建包下面的__init__.py 文件的名称空间
2.执行包下面的————init__.py文件中的代码 将产生的名字放入__init__.py的名称空间中
3.在执行的文件中拿到一个执行包下面的__init__.py文件的名称空间的名字
1.3 在导入语句中. 号左边肯定是一个包(文件夹)
1.4 为什么要创建包(文件夹会执行创————init__.py文件)
当模块的功能作为包的设计者来说 1、当模块的功能特别多的时候,应该分文件管理,结构清晰 2、每个模块之间为了避免后期模块改名的问题,你可以使用相对导入点点语法(包的文件都应该是被导入的模块) 站在包的开发者 如果使用的是绝对路径来管理自己的模块,那么它只需要永远以包的路径为依据导入模块 站在使用者的角度 必须将包的所在的那个文件接路径添加到system path 中
1.5 python2 和 python3 在包的区别
python2 中要导入包必须要有__init__.py文件
python3 中如果要导包 包下可以没有__init__.py 文件 也不会报错
注意:当你在删除程序不要的文件,千万不要随意删除__init__.py文件 即使为空
二、logging模块
# 函数式简单配置 """ import logging logging.debug(‘debug message日志‘) #等级10 logging.info(‘info message日志‘) # 等级20 logging.warning(‘warning message‘) # 等级30 logging.error(‘error message‘) # 等40 logging.critical(‘critical message‘) # 等级50 """ # 灵活配置日志级别、日志格式、输出位置 """ import logging # d导入logging 模块 file_handler = logging.FileHandler(filename=‘x1.log‘, mode=‘a‘, encoding=‘utf-8‘,) logging.basicConfig( format=‘%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s‘, datefmt=‘%Y-%m-%d %H:%M:%S %p‘, handlers=[file_handler,], level=logging.ERROR ) logging.error(‘你好‘) """ # 1.日志分为五个等级: 类似于地震的强度 """ import logging 模块 logging.debug(‘debug message日志‘) #等级10 1.debug 日志:为第一级可以人为的设定等级数>>>10 logging.info(‘info message日志‘) # 等级20 2.info 日志:为第二级 设置为20 logging.warning(‘warning message‘) # 等级30 3.warning 日志:为第三级 设置为30 logging.error(‘error message‘) # 等40 4.error 日志:40 logging.critical(‘critical message‘) # 等级50 5.critical 日志:50 记录日志是可以设置的内容的 你设置在那一层就会从那一层开始上记录 """ # 2. 四个对象: """ 1.logger 对象>>>产生日志的 2.filter 对象>>>过滤日志 3.handler 对象>>>控制台指定文件输入的位置:输出的位置是文件还是中端。 4.formmater 对象>>> 按照什么格式进行输出的: """ # 一、写日志 # 1.logger对象:负责产生日志: import logging logger = logging.getLogger(‘转账明细:‘) # 2.2.filter 对象>>>过滤日志 了解 # 3.handler(输出位置文件/终端) handler1 = logging.FileHandler(‘a1.log‘,encoding=‘utf-8‘) # 控制台指定的输出的位置:文件a1 handler2 = logging.FileHandler(‘a2.log‘,encoding=‘utf-8‘) # 控制台指定的输出的位置:文件a2 handler3 = logging.StreamHandler() # 控制台指定的输出的位置:是终端不需要传参数 流的形式 # 4.formmater 对象:规定日志内容的格式的格式 fm1 = logging.Formatter( fmt=‘%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s‘, datefmt=‘%Y-%m-%d %H:%M:%S %p‘) fm2 = logging.Formatter( fmt=‘%(asctime)s - %(name)s: %(message)s‘, datefmt=‘%Y-%m-%d‘) # 5.给logger对象绑定(添加)handler 对象 logger.addHandler(handler1) # logger.addHandler(handler2) # logger.addHandler(handler3) # # 6.给handler 绑定formmater对象、 handler1.setFormatter(fm1) handler2.setFormatter(fm2) handler3.setFormatter(fm1) # 7.设置日志等级 logger.setLevel(10) # 8.记录日志:起始 logger.info(‘手撸日志 累死了啊‘)
logging 日志配置字典
三、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指定的名字 simple_format = ‘[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s‘ # 定义日志输出格式 结束 """ 下面的两个变量对应的值 需要你手动修改 """ logfile_dir = os.path.dirname(__file__) # log文件的目录 logfile_name = ‘a3.log‘ # log文件名 # 如果不存在定义的日志目录就创建一个 if not os.path.isdir(logfile_dir): os.mkdir(logfile_dir) # log文件的全路径 logfile_path = os.path.join(logfile_dir, logfile_name) # log配置字典 LOGGING_DIC = { ‘version‘: 1, ‘disable_existing_loggers‘: False, ‘formatters‘: { ‘standard‘: { ‘format‘: standard_format }, ‘simple‘: { ‘format‘: simple_format }, }, ‘filters‘: {}, # 过滤日志 ‘handlers‘: { #打印到终端的日志 ‘console‘: { ‘level‘: ‘DEBUG‘, ‘class‘: ‘logging.StreamHandler‘, # 打印到屏幕 ‘formatter‘: ‘simple‘ }, #打印到文件的日志,收集info及以上的日志 ‘default‘: { ‘level‘: ‘DEBUG‘, ‘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配置 ‘‘: { ‘handlers‘: [‘default‘, ‘console‘], # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕 ‘level‘: ‘DEBUG‘, ‘propagate‘: True, # 向上(更高level的logger)传递 }, # 当键不存在的情况下 默认都会使用该k:v配置 }, }
# 日志调用 common
# 使用日志字典配置 后期将用函数封装 导入common 生成logger对象 logging.config.dictConfig(LOGGING_DIC) # 自动加载字典中的配置 logger1 = logging.getLogger(‘asajdjdskaj‘) logger1.debug(‘好好的 不要浮躁 努力就有收获‘)
四、hasblib模块
import hashlib
# 生成个md5对象
md = hashlib()
# 加盐
md.update(’都可以加的内容‘)
md.update(‘再加点盐‘)
md.hexdigest()
print(md.hexdigest())
import hashlib
import hashlib
def get_md5(data):
md = hashlib.md5()
md.update(‘都可以加的内容‘.encode(‘utf-8‘))
md.update(data.encode(‘utf-8‘))
return md.hexdigest()
# 函数调用:
password = input(‘输入密码:‘).strip()
res1 = get_md5(password)
print(res1)
五、openpyxl模块
# openpyxl 比较火的操作excel表格的模块 """ 03版本之前 excel文件的后缀名 叫xls 03版本之后 excel文件的后缀名 叫xlsx xlwd 写excel xlrt 读excel xlwd和xlrt既支持03版本之前的excel文件也支持03版本之后的excel文件 openpyxl 只支持03版本之后的 xlsx """
# 1.写excel 表格
from openpyxl import Workbook
首先生成一个工作薄
wb = Workbook()
2.创建一个表单页 后面可以通过数字控制位置
wb1 = wb.create_sheet(‘表格一‘,0) # 创建一个表单页 后面可以通过数字控制位置 wb2 = wb.create_sheet(‘表格二‘,1) # 创建一个表单页 后面可以通过数字控制位置
3. 更改表单页的名字
wb1.title = ‘login日志‘ # 更改表单页的名字 wb2.title = ‘流水日志‘ # 可以通过wb2.title更改表单页名字
4..可以指定按表格填写内容
# wb1 [‘A3‘] = 1000 # wb1 [‘A4‘] = 999 # wb1 [‘A5‘] = ‘=sum(A3:A4)‘ #求和 # 可以指定的行和列中写 # wb1.cell(row=6,column=3,value=9999) #
5.创建一个表头
# 4.创建一个表头 # wb1.append([‘username‘,‘age‘,‘hobby‘]) # # 给表格写点内容 # wb1.append([‘coco‘,18,‘dancing‘]) # wb1.append([‘yy‘,26,‘we‘]) # wb1.append([‘jason‘,19,‘开车‘]) # wb1.append([‘tank‘,18,‘生蚝‘]) #
最重要的是保存: 保存新建的excel 文件 wb.save(‘today1.xlsx‘) # 先创建一个表格文件
# 1.写 from openpyxl import wordbook
wd = workbook() # 生成一个工作薄对象
1.出创建表单页:
wb1 = wb.create_sheet(参数一是表单页名‘,0是可以控制位置)
2.改 表单页的名字
wb1.title = ‘lgoin 日志’
#2.wb.save()
3.写内容:操作生成的表单页对象 指定位置填写
4.创建表头
# 操作表单页对象wb1.append([]) 写的时候一一对应
二、读.读取表格内容
from openpyxl import load_workbook # 导入读取
wb = load_workbook(‘today1.xlsx‘,read_only=True,data_only=True)
print(wb.sheetnames) # 拿到表里面的名子 # [‘login日志‘, ‘流水日志‘, ‘Sheet‘] print(wb[‘login日志‘][‘C3‘].value) res = wb[‘login日志‘] print(res) w = res.rows for i in res.rows: print(i) # <ReadOnlyCell ‘login日志‘.C5> for j in i: print(j.value) print() # username # age # hobby # coco # 18 # dancing # tank # 18 # 生蚝
通过代码产生的excel表格必须经过人为操作之后才能读取出函数计算出来的结果值
标签:file_path bsp col format icc 常用 use 日志输出 ica
原文地址:https://www.cnblogs.com/mofujin/p/11215642.html