广州各类外贸网站,朔州市建设监理公司网站,给别人做网站是外包公司,公司做网站需要准备哪些资料包 logging 模块 logging 配置字典 hashlib 模块 openpyxl 模块 深浅拷贝 一 模块 1.0.1 模块回顾 模块
# 三种来源1.内置的2.第三方的3.自定义的
# 四种表示形式1.py文件(******)2.共享库3.文件夹(一系列模块的结合体)(******)4.C编译的连接到python内置的 1.0.2 模块与包 # 研… 包 logging 模块 logging 配置字典 hashlib 模块 openpyxl 模块 深浅拷贝 一 模块 1.0.1 模块回顾 模块
# 三种来源1.内置的2.第三方的3.自定义的
# 四种表示形式1.py文件(******)2.共享库3.文件夹(一系列模块的结合体)(******)4.C编译的连接到python内置的 1.0.2 模块与包 # 研究模块与包 还可以站另外两个角度分析不同的问题
# 1.模块的开发者
# 2.模块的使用者# 模块: 先产生一个执行文件的名称空间1.创建模块文件的名称空间2.执行模块文件中的代码 将产生的名字放入模块的名称空间中3.在执行文件中拿到一个指向模块名称空间的名字 1.1 什么是包 #官网解释
Packages are a way of structuring Python’s module namespace by using “dotted module names”
包是一种通过使用.模块名来组织python模块名称空间的方式。#具体的它是一系列模块文件的结合体,表示形式就是一个文件夹,该文件夹内部通常会有一个__init__.py文件,所以其实我们创建包的目的就是为了用文件夹将文件/模块组织起来, 包的本质还是一个模块
# from dir.dir1 import #需要强调的是
1. 在python3中即使包下没有__init__.py文件import 包仍然不会报错而在python2中包下一定要有该文件否则import 包报错
2. 创建包的目的不是为了运行而是被导入使用记住包只是模块的一种形式而已包的本质就是一种模块 1.2 为何要使用包 # 包的本质就是一个文件夹那么文件夹唯一的功能就是将文件组织起来,随着功能越写越多我们无法将所以功能都放到一个文件中于是我们使用模块去组织功能而随着模块越来越多我们就需要用文件夹将模块文件组织起来以此来提高程序的结构性和可维护性 1.3 注意事项 #1.关于包相关的导入语句也分为import和from ... import ...两种但是无论哪种无论在什么位置在导入时都必须遵循一个原则凡是在导入时带点的点的左边都必须是一个包否则非法。可以带有一连串的点如item.subitem.subsubitem,但都必须遵循这个原则。但对于导入后在使用时就没有这种限制了点的左边可以是包,模块函数类(它们都可以用点的方式调用自己的属性)。#2、import导入文件时产生名称空间中的名字来源于文件import 包产生的名称空间的名字同样来源于文件即包下的__init__.py导入包本质就是在导入该文件#3、包A和包B下有同名模块也不会冲突如A.a与B.a来自俩个命名空间 1.4 案例示范 1 实验一准备执行文件为test.py内容#test.pyimport aaa同级目录下创建目录aaa,然后自建空__init__.py(或者干脆建包)需求验证导入包就是在导入包下的__init__.py解决先执行看结果再在__init__.py添加打印信息后重新执行2、实验二准备基于上面的结果需求aaa.xaaa.y解决在__init__.py中定义名字x和y3、实验三准备在aaa下建立m1.py和m2.py#m1.pydef f1():print(from 1)#m2.pydef f2():print(from 2)需求aaa.m1 #进而aaa.m1.func1()aaa.m2 #进而aaa.m2.func2()
解决在__init__.py中定义名字m1和m2,先定义一个普通变量再引出如何导入模块名强调:环境变量是以执行文件为准4、实验四准备在aaa下新建包bbb需求aaa.bbb解决在aaa的__init__.py内导入名字bbb5、实验五准备在bbb下建立模块m3.py#m3.pydef f3():print(from 3)需求aaa.bbb.m3 #进而aaa.bbb.m3.f3()
解决是bbb下的名字m3因而要在bbb的__init__.py文件中导入名字m3from aaa.bbb import m36、实验六准备基于上面的结果需求:aaa.m1()aaa.m2()aaa.m3()进而实现aaa.f1()aaa.f2()aaa.f3()先用绝对导入再用相对导入解决在aaa的__init__.py中拿到名字m1、m2、m3包内模块直接的相对导入强调包的本质包内的模块是用来被导入的而不是被执行的用户无法区分模块是文件还是一个包我们定义包是为了方便开发者维护7、实验七将包整理当做一个模块移动到别的目录下操作sys.path View Code 1.5 导入包 # 首次导入包:先产生一个执行文件的名称空间1.创建包下面的__init__.py文件的名称空间2.执行包下面的__init__.py文件中的代码 将产生的名字放入包下面的__init__.py文件名称空间中3.在执行文件中拿到一个指向包下面的__init__.py文件名称空间的名字在导入语句中 .号的左边肯定是一个包(文件夹)# 当你作为包的设计者来说1.当模块的功能特别多的情况下 应该分文件管理2.每个模块之间为了避免后期模块改名的问题 你可以使用相对导入(包里面的文件都应该是被导入的模块)站在包的开发者 如果使用绝对路径来管理的自己的模块 那么它只需要永远以包的路径为基准依次导入模块
站在包的使用者 你必须得将包所在的那个文件夹路径添加到system path中(******)python2如果要导入包 包下面必须要有__init__.py文件
python3如果要导入包 包下面没有__init__.py文件也不会报错
当你在删程序不必要的文件的时候 千万不要随意删除__init__.py文件
# p.f1()
# p.f2()
# p.f3()
# p.f4()import p1 二 logging 模块 日志模块:记录 import logginglogging.basicConfig(filenameaccess.log,format%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s,datefmt%Y-%m-%d %H:%M:%S %p,level30,)logging.debug(debug日志) # 10
logging.info(info日志) # 20
logging.warning(warning日志) # 30
logging.error(error日志) # 40
logging.critical(critical日志) # 50 问题 # 1.乱码
# 2.日志格式
# 3.如何既打印到终端又写到文件中 日志分为五个等级 等级:地震的强度 # 1.logger对象:负责产生日志
# 2.filter对象:过滤日志(了解)
# 3.handler对象:控制日志输出的位置(文件/终端)
# 4.formmater对象:规定日志内容的格式 hfajks import logging# 1.logger对象:负责产生日志
logger logging.getLogger(转账记录)
# 2.filter对象:过滤日志(了解)# 3.handler对象:控制日志输出的位置(文件/终端)
hd1 logging.FileHandler(a1.log,encodingutf-8) # 输出到文件中
hd2 logging.FileHandler(a2.log,encodingutf-8) # 输出到文件中
hd3 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(hd1)
logger.addHandler(hd2)
logger.addHandler(hd3)# 6.给handler绑定formmate对象
hd1.setFormatter(fm1)
hd2.setFormatter(fm2)
hd3.setFormatter(fm1)# 7.设置日志等级
logger.setLevel(20)# 8.记录日志
logger.debug(写了半天 好累啊 好热啊 好想释放) 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, # 日志大小 5MbackupCount: 5,encoding: utf-8, # 日志文件的编码再也不用担心中文log乱码了},},loggers: {#logging.getLogger(__name__)拿到的logger配置: {handlers: [default, console], # 这里把上面定义的两个handler都加上即log数据既写入文件又打印到屏幕level: DEBUG,propagate: True, # 向上更高level的logger传递}, # 当键不存在的情况下 默认都会使用该k:v配置},
}# 使用日志字典配置
logging.config.dictConfig(LOGGING_DIC) # 自动加载字典中的配置
logger1 logging.getLogger(asajdjdskaj)
logger1.debug(好好的 不要浮躁 努力就有收获) View Code hashlib模块 hashlib模块 加密的模块
import hashlib # 这个加密的过程是无法解密的
md hashlib.sha3_256() # 生成一个帮你造密文的对象
# md.update(hello.encode(utf-8)) # 往对象里传明文数据 update只能接受bytes类型的数据
md.update(bJason_.) # 往对象里传明文数据 update只能接受bytes类型的数据
print(md.hexdigest()) # 获取明文数据对应的密文 撞库 1.不用的算法 使用方法是相同的
密文的长度越长 内部对应的算法越复杂
但是1.时间消耗越长2.占用空间更大
通常情况下使用md5算法 就可以足够了 dffh import hashlib
# 传入的内容 可以分多次传入 只要传入的内容相同 那么生成的密文肯定相同
md hashlib.md5()
md.update(bareyouok?)
md.update(bare)
md.update(byou)
md.update(bok?)
print(md.hexdigest()) # 408ac8c66b1e988ee8e2862edea06cc7
408ac8c66b1e988ee8e2862edea06cc7 hashlib模块应用场景 1.密码的密文存储 2.校验文件内容是否一致 加盐处理 import hashlibmd hashlib.md5()
# 公司自己在每一个需要加密的数据之前 先手动添加一些内容
md.update(boldboy.com) # 加盐处理
md.update(bhello) # 真正的内容
print(md.hexdigest()) 动态加盐 import hashlibdef get_md5(data):md hashlib.md5()md.update(加盐.encode(utf-8))md.update(data.encode(utf-8))return md.hexdigest()password input(password:)
res get_md5(password)
print(res) openpyxl模块 openpyxl 简介 # openpyxl 比较火的操作excel表格的模块03版本之前 excel文件的后缀名 叫xls
03版本之后 excel文件的后缀名 叫xlsxxlwd 写excel
xlrt 读excelxlwd和xlrt既支持03版本之前的excel文件也支持03版本之后的excel文件
openpyxl 只支持03版本之后的 xlsx 写 from openpyxl import Workbookwb Workbook() # 先生成一个工作簿
wb1 wb.create_sheet(index,0) # 创建一个表单页 后面可以通过数字控制位置
wb2 wb.create_sheet(index1)
wb1.title login # 后期可以通过表单页对象点title修改表单页名称wb1[A3] 666
wb1[A4] 444
wb1.cell(row6,column3,value88888888)
wb1[A5] sum(A3:A4)wb2[G6] 999
wb1.append([username,age,hobby])
wb1.append([jason,18,study])
wb1.append([tank,72,吃生蚝])
wb1.append([egon,84,女教练])
wb1.append([sean,23,会所])
wb1.append([nick,28,])
wb1.append([nick,,秃头])保存新建的excel文件
wb.save(test.xlsx) sdj from openpyxl import load_workbook # 读文件
wb load_workbook(test.xlsx,read_onlyTrue,data_onlyTrue)
# print(wb)
# print(wb.sheetnames) # [login, Sheet, index1]
# print(wb[login][A3].value)
# print(wb[login][A4].value)
# print(wb[login][A5].value) # 通过代码产生的excel表格必须经过人为操作之后才能读取出函数计算出来的结果值res wb[login]
# print(res)
ge1 res.rows
for i in ge1:for j in i:print(j.value) 深浅拷贝 浅拷贝 深拷贝 应用 import copyl [1,2,[1,2]]
# l1 l
# print(id(l),id(l1))
# l1 copy.copy(l) # 拷贝一份 ....... 浅拷贝
# print(id(l),id(l1))
# # l[0] 222
# # print(l,l1)
# l[2].append(666)
# print(l,l1)
l1 copy.deepcopy(l)
l[2].append(666)
print(l,l1) asdf adff 转载于:https://www.cnblogs.com/Ryan-Yuan/p/11222236.html