函数知识点 1.包 2.hashlib模块 --- 摘要算法模块 3.logging模块 4.openpyxl模块 5.深浅拷贝 # 17

Posted 灵虚御风

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数知识点 1.包 2.hashlib模块 --- 摘要算法模块 3.logging模块 4.openpyxl模块 5.深浅拷贝 # 17相关的知识,希望对你有一定的参考价值。

函数知识点
1.包
 1 # coding(编码系统):utf-8
 2 """
 3 1.模块的三种来源:
 4     1.内置
 5     2.第三方
 6     3.自定义
 7 2.模块的四种表现形式:
 8     1.  .py文件
 9     2.共享文件
10     3.包
11     4.内置
12 3.研究模块和包:
13 # 还可以站在另外两个角度分析:
14     1.模块的开发者
15     2.模块的使用者
16 4.导模块的那一瞬间发生了什么?
17     首先运行执行文件run.py,创建一个run.py的名称空间
18         1.执行文件md,创建一个md的名称空间
19         2.把运行md得到的名字和内容存储到名称空间md中
20         3.返回一个指向执行文件run的名字md(import md)/返回一个指向执行文件run的内容的值的名字money(from md impory money)
21     多次导包不执行,沿用之前得到的结果
22 """
23 """
24 包:
25 1.定义:
26     1.一系列模块文件的结合体,表现在外部即为文件夹
27     2.这个包的内部通常具有一个__init__.py文件
28 2.本质:依然是模块
29 
30 """
31 """
32 __init__.py
33 # 我记自己的方法:
34 # import os,sys
35 # sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(__file__)))))
36 # from dir.dir1.dir11 import m1,m2,m3
37 
38 # 老师的方法:
39 from dir.dir1.dir11.m2 import f2
40 from dir.dir1.dir11.m1 import f1
41 from dir.dir1.dir11.m3 import f3
42 """
43 from dir.dir1 import dir11
44 # ps:在导入语句中 . 的左边肯定是一个包
45 # 方法一:
46 # dir11.m1.f1()  # from m1
47 # dir11.m2.f2()  # from m2
48 # dir11.m3.f3()  # from m3
49 # 方法二
50 dir11.f1()
51 dir11.f2()
52 dir11.f3()
53 """
54 # 导模块的那一瞬间,发生了什么?
55 首先运行执行文件run.py,创建一个run.py的名称空间
56         1.执行包,创建一个包下面的__init__.py的名称空间
57         2.把运行包得到的名字和内容存储到名称空间__init__.py中
58         3.返回一个指向执行文件run的名字settings
59     多次导包不执行,沿用之前得到的结果
60 """
61 """
62 3.研究模块和包:
63 # 还可以站在另外两个角度分析:
64     1.模块的开发者
65     2.模块的使用者
66 """
67 """
68 1.模块的开发者
69 # 1.相对导入
70     1.当模块的功能过多时,需要以文件的形式分类存储,方便管理
71     2.每个模块之间为了避免后期模块改名的问题 你可以使用相对导入(包里面的文件都应该是被导入的模块)
72 # 2.绝对导入
73     1.绝对导入要确认文件的路径,以包的路径为基准依次导入模块
74     2.为确保路径导入正确,要提前把文件路径添加到环境变量中(sys.path.append)
75 """
76 """
77 2.模块的使用者
78 """
79 """
80 python2-python3导包的区别:
81 Python2中导包必须有__init__.py文件,没有会报错
82 python3 导包没有__init__文件,也不会报错,因为Python3自动为包创建了__init__文件,所以在删除不必要文件的时候,千万不要随意删除__init__文件
83 """

 


2.hashlib模块 --- 摘要算法模块
 1 """
 2 hashlib  加密模块
 3 
 4 """
 5 """
 6 格式:
 7 # 导模块
 8 import hashlib  # 这个加密的过程是无法解密的
 9 ## 1.生成一个帮你造密文的对象
10 md = hashlib.md5()  
11 ## 2.往对象里传明文数据  
12 ps:
13     1.update只能接受bytes类型的数据
14     2.encode(\'utf-8\') 转码
15 md.update(\'hello\'.encode(\'utf-8\')) 
16 ## 2.往对象里传明文数据  
17 ps:
18     1.update只能接受bytes类型的数据
19     2.b\'\'转码
20 md.update(b\'Jason_@.\') 
21 # 3.加盐
22 md.update(b\'dsfghljl;kl;;fdsrduytfuugiiui\') 
23 ## 4.获取加密数据
24 # print(md.hexdigest()) 
25 """
26 # 撞库
27 """
28 1.不用的算法 使用方法是相同的
29 密文的长度越长 内部对应的算法越复杂
30 但是
31     1.时间消耗越长
32     2.占用空间更大
33 通常情况下使用md5算法 就可以足够了
34 """
35 """
36 ps:
37 # 传入的内容 可以分多次传入 只要传入的内容相同 那么生成的密文肯定相同
38 """
39 # 函数版本
40 """
41 # 函数版本 ,加密加盐
42 # 动态加盐,
43     一般是把文件的名字或者CPU处理的时间,这些对象加进去,提高安全性
44 """
45 import hashlib
46 def get_pwd(pwd):
47 
48     md5 = hashlib.md5()
49     md5.update(b\'hhhh123456hhh\')
50     md5.update(pwd.encode(\'utf-8\'))
51     md5.update(b\'hhhj123456hgjhfghfhh\')
52     # md5.update(pwd.encode(\'utf-8\'))
53     return md5.hexdigest()
54 pwd = input(\'pwd>>>:\')
55 print(get_pwd(pwd))
56 
57 """
58 应用场景:
59 1.密码的密文存储
60 2.校验文件内容是否一致
61 """
hashlib 加密加盐

 



3.logging模块
两种日志方法:
 1 """
 2 日志模块:记录流水
 3 """
 4 import logging
 5 
 6 # 二.日志的格式
 7 # 1.文件 basicConfig 基本配置
 8 # logging.basicConfig(filename=\'access.log\',format=\'%(asctime)s - %(name)s - %(levelname)s - %(module)s - %(message)s\',datefmt=\'%Y-%m-%d %H:%M:%S %p\',level=10,)
 9 # 2.终端
10 # logging.basicConfig(format=\'%(asctime)s - %(name)s - %(levelname)s - %(module)s - %(message)s\',datefmt=\'%Y-%m-%d %H:%M:%S %p\',level=10,stream=True)
11 
12 # 一.日志的五个等级,等级类似于:地震的强度
13 # # 1.走马观花,最不重要的信息
14 # logging.debug(\'debug日志\')  # 10
15 # # 2.普通信息
16 # logging.info(\'info日志\')  # 20
17 # # 3.警告信息
18 # logging.warning(\'warning日志\')  # 30
19 # # 4.错误信息
20 # logging.error(\'errorr日志\')  # 40
21 # # 5.严重错误信息
22 # logging.critical(\'critical日志\')  # 50
23 
24 """
25 # 三.日志的四大成员--即四大对象
26 # 1.logger 对象 负责生产日志
27 # 2.filter 对象 过滤日志(了解) # 有好几层过滤
28 # 3.handler 对象 控制日志输出的位置(文件/终端)
29 # 4.formmater 对象 规定日志内容的格式
30 """
31 """
32 ps:日志的配置字典.py
33 
34 """
35 # 案例
36 # 1.logger 对象 负责生产日志
37 logger = logging.getLogger(\'转张记录\')
38 # print(logger)  # <Logger 转张记录 (WARNING)>
39 
40 # 2.filter 对象 过滤日志(了解)
41 
42 # 3.handler 对象 控制日志输出的位置(文件/终端)
43 hd1 = logging.FileHandler(\'a1.log\',encoding=\'utf-8\')  # 输入到文件中
44 hd2 = logging.FileHandler(\'a2.log\',encoding=\'utf-8\')  # 输出到文件中
45 hd3 = logging.StreamHandler()  # 输出到终端
46 # # 4.formmater 对象 规定日志内容的格式
47 fm1 = logging.Formatter(fmt=\'%(asctime)s - %(name)s - %(levelname)s -%(module)s:  %(message)s\',
48         datefmt=\'%Y-%m-%d %H:%M:%S %p\',)
49 fm2 = logging.Formatter(
50         fmt=\'%(asctime)s - %(name)s:  %(message)s\',
51         datefmt=\'%Y-%m-%d\',)
52 
53 # 5.给logger对象绑定handler对象
54 logger.addHandler(hd1)
55 logger.addHandler(hd2)
56 logger.addHandler(hd3)
57 # 6.给hander绑定formmate对象
58 hd1.setFormatter(fm1)
59 hd2.setFormatter(fm2)
60 hd3.setFormatter(fm1)
61 # 7.设置日志登记 Level 等级
62 logger.setLevel(10)
63 # 8.记录日志
64 logger.debug(\'haofana,zhengshisble,nidayede aaaaaaaaaaaaaaaaaaaaaaa\')
65 
66 # 值:2019-07-19 21:33:29 PM - 转张记录 - DEBUG -logging模块:  haofana,zhengshisble,nidayede aaaaaaaaaaaaaaaaaaaaaaa
1.logging模块

 

 1 import os
 2 import logging.config   # 配置,布局
 3 """
 4 知识点1:日志输出的格式
 5 """
 6 # 定义三种日志输出的格式   # 开始
 7 # standart 标准格式
 8 standart_format = \'[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]\' \\
 9                   \'[%(levelname)s][%(message)s]\'  # name 为getlogger 指定的名字
10 # simple 简单格式
11 simple_format = \'[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s\'
12 # 定义日志输出的格式   # 结束
13 
14 """
15 # 知识点2
16 下面的两个变量对应的值 需要你手动修改
17 """
18 # # log文件的目录
19 logfile_dir = os.path.dirname(__file__)
20 # log文件名
21 logfile_name = \'a3.log\'
22 
23 
24 """
25 # 知识点3
26 # 如果不存在定义的日志目录就创建一个
27 """
28 # os.path.isdir 判断指定路径是否存在
29 if not os.path.isdir(logfile_dir):
30     # os.mkdir 创建新文件
31     os.mkdir(logfile_dir)
32 """
33 知识点4
34 log文件的全路径
35 """
36 # 把指定路径拼接到名字中
37 logfile_path = os.path.join(logfile_dir,logfile_name)
38 
39 """
40 知识点5
41 log配置文件
42 """
43 LOGGING_DIC = {
44     \'version\': 1,  # version版本
45     \'disable_existing_loggers\': False,  # disable_existing_loggers 禁用现有记录器
46     \'formatters\': {
47         \'standard\': {
48             \'format\': standart_format
49         },  # format 格式
50         \'simple\': {
51             \'format\': simple_format
52         },
53     },
54     \'filters\': {},  # 过滤日志
55     \'handlers\': {
56         #打印到终端的日志
57         \'console\': {
58             \'level\': \'DEBUG\',
59             \'class\': \'logging.StreamHandler\',  # 打印到屏幕
60             \'formatter\': \'simple\'
61         },
62         #打印到文件的日志,收集info及以上的日志
63         \'default\': {
64             \'level\': \'DEBUG\',
65             \'class\': \'logging.handlers.RotatingFileHandler\',  # 保存到文件
66             \'formatter\': \'standard\',
67             \'filename\': logfile_path,  # 日志文件
68             \'maxBytes\': 1024*1024*5,  # 日志大小 5M
69             \'backupCount\': 5,
70             \'encoding\': \'utf-8\',  # 日志文件的编码,再也不用担心中文log乱码了
71         },
72     },
73     \'loggers\': {
74         #logging.getLogger(__name__)拿到的logger配置
75         \'\': {
76             \'handlers\': [\'default\', \'console\'],  # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
77             \'level\': \'DEBUG\',
78             \'propagate\': True,  # 向上(更高level的logger)传递
79         },  # 当键不存在的情况下 默认都会使用该k:v配置
80     },
81 }
82 """
83 知识点5
84 使用日志字典配置
85 """
86 # 自动加载字典中的配置
87 logging.config.dictConfig(LOGGING_DIC)
88 # 负责生产日志
89 logger1 = logging.getLogger(\'随机日志\')
90 # 记录日志
91 logger1.debug(\'haoxiang偶啊没但是我不能加油坚持就是胜利\')
92 
93 # 结果
94 # 文件 a3.log
95 # cmd
96 # [DEBUG][2019-07-19 22:14:18,991][logging配置字典.py:91]haoxiang偶啊没但是我不能加油坚持就是胜利
2.日志配置字典

 


4.openpyxl模块
 1 """
 2 # 操作Excel表格读写
 3     03版本之前 excel文件的后缀名 叫xls
 4     03版本之后 excel文件的后缀名 叫xlsx
 5 """
 6 """
 7 方法一
 8     openpyxl模块  -- 近期比较火的操作 -- 只支持03版本之后
 9         1.写 
10         from openpyxl import Workbook
11         2.读
12         from openpyxl import load_workbook
13 方法二 及支持03版本之前,也支持03版本之后
14     xlwd 写
15     xlrt 读
16 """
17 #
18 # from openpyxl import Workbook
19 # # 1.先生成一个工作铺
20 # wb = Workbook()
21 # # 2.创建一个表单页,0 :后面可以通过数字控制位置
22 # wb1 = wb.create_sheet(\'index\',0)
23 # wb2 = wb.create_sheet(\'index1\')
24 # # 3.创建标题,即表单页名称
25 # # ps:后期可以通过表单页对象点title修改表单页名称
26 # wb1.title = \'login\'
27 # # 4.单元格赋值
28 # # wb1[\'A3\'] = 666
29 # # wb1[\'A4\'] = 444
30 # # # 5.按坐标复制 row 列 column 行
31 # # wb1.cell(row=6,column=3,value=88888888)
32 # # # sum()  总和
33 # # wb1[\'A5\'] = \'=sum(A3:A4)\'
34 # # wb2[\'G6\'] = 999
35 # # 6.添加行标题
36 # wb1.append([\'username\',\'age\',\'hobby\'])
37 # # 7.行标题赋值
38 # wb1.append([\'jason\',18,\'study\'])
39 # wb1.append([\'tank\',72,\'吃生蚝\'])
40 # wb1.append([\'egon\',84,\'女教练\'])
41 # wb1.append([\'sean\',23,\'会所\'])
42 # wb1.append([\'nick\',28,])
43 # wb1.append([\'nick\',\'\',\'秃头\'])
44 # # 8.保存新建的excel文件
45 # wb.save(\'2test.xlsx\')
46 
47 #
48 from openpyxl import load_workbook
49 # 1.添加指定工作簿声明  data 数据  仅仅读数据
50 wb = load_workbook(\'2test.xlsx\',read_only=True,data_only=True)
51 # print(wb)  # <openpyxl.workbook.workbook.Workbook object at 0x000001E4E75D6AC8>
52 # 2.打印表格页的名称  sheetnames 表格名字
53 # print(wb.sheetnames)  # [\'login\', \'Sheet\', \'index1\']
54 # print(wb[\'login\'][\'A3\'].value)  # tank
55 # print(wb[\'login\'][\'A4\'].value)  # egon
56 # print(wb[\'login\'][\'A5\'].value)  # sean
57 # # ps:通过代码产生的excel表格必须经过人为操作之后才能读取出函数计算出来的结果值
58 
59 res = wb[\'login\']
60 # print(res)  # <openpyxl.worksheet._read_only.ReadOnlyWorksheet object at 0x00000283375ECA58>
61 ge1 = res.rows
62 for i in ge1:
63     for j in i:
64         print(j.value)
操作表格

 


5.深浅拷贝

 1 """
 2 深拷贝与浅考的区别:
 3 浅拷贝的本质:
 4 对于可变类型,浅拷配指向依然

以上是关于函数知识点 1.包 2.hashlib模块 --- 摘要算法模块 3.logging模块 4.openpyxl模块 5.深浅拷贝 # 17的主要内容,如果未能解决你的问题,请参考以下文章

hashlib模块

hashlib和hmac模块

Python小知识点--模块相关

22.Python函数Python模块

python-知识点的复习

模块