包与常用模块

一、包

1.什么是包?

它是一系列模块文件的结合体,表现形式就是一个文件夹,

该文件内部通常会有一个__init__.py文件,包的本质还是一个模块.

2.为何要使用包?

包的本质就是一个文件夹,那么文件夹唯一的功能就是将文件组织起来随着功能越写越多,我们无法将所以功能都放到一个文件中,于是我们使用模块去组织功能,而随着模块越来越多,我们就需要用文件夹将模块文件组织起来,以此来提高程序的结构性和可维护性.

3.首次导入包

先产生一个执行文件的名称空间

1.>创建包下下面的__init__.py文件的名称空间

2.>执行包下面的init.py文件中的代码,将产生的名字放入包下面的__init__.py文件米工程空间中

3.>在执行文件中拿到一个指向包下面的__init__.py文件名称空间的名字

在导入语句中 .号的左边肯定是一个包(文件夹)

新增一个“包”文件

自带__init__.py文件

作为包的设计者来说

1.当模块功能特别多的情况下,应该分文件管理

2.每个模块之间为了避免后期模块改名的问题,可以使用相对导入(包里面的文件都应该是被导入的模块)

站在包的开发者:如果使用绝对路径来管理自己的模块,那么他只需要永远以包的路径为基准依次倒入模块

站在包的使用者:必须将报所在的那个文件夹路径添加到system path中

注意:

python2如果要导入包,包下面必须有init.pyt文件

python3如果要导入包,包下面没有__init__.py文件也不会报错

当删除程序中不必要文件的时候,千万不能随意删除__init__.py文件

二、logging模块(日志模块)

1.日志的五个等级

1.>logging.debug(‘debug日志‘)

2.>logging.info(‘info日志‘)

3.>logging.warning(‘warning日志‘)

4.>logging.error(‘error日志‘)

5.>logging.critical(‘critical日志‘)

这五个等级依次递增

2.日志的四个对象

1.>logger对象:负责产生日志

2.>filter对象:过滤日志(了解)

3.>handler对象:控制日志输出的位置(文件/终端)

4.>formmater对象:规定日志内容的格式

logger对象:负责产生日志

logger = logging.getLogger(‘转账记录‘)

filter对象:过滤日志(了解)

handler对象:控制日志输出的位置(文件/终端)

hd1 = logging.FileHandler(‘a1.log‘,encoding=‘utf-8‘) # 输出到文件中 hd2 = logging.FileHandler(‘a2.log‘,encoding=‘utf-8‘) # 输出到文件中 hd3 = logging.StreamHandler() # 输出到终端

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‘, )

给logger对象绑定handler对象

logger.addHandler(hd1) logger.addHandler(hd2) logger.addHandler(hd3)

给handler绑定formmate对象

hd1.setFormatter(fm1) hd2.setFormatter(fm2) hd3.setFormatter(fm1)

设置日志等级

logger.setLevel(20)

记录日志

logger.debug(‘ 好热啊 ‘)

3.配置参数

logging.basicConfig()函数中可通过具体参数来更改logging模块默认行为,可用参数有:?filename:用指定的文件名创建FiledHandler,这样日志会被存储在指定的文件中。filemode:文件打开方式,在指定了filename时使用这个参数,默认值为“a”还可指定为“w”。format:指定handler使用的日志显示格式。datefmt:指定日期时间格式。level:设置rootlogger(后边会讲解具体概念)的日志级别stream:用指定的stream创建StreamHandler。可以指定输出到sys.stderr,sys.stdout或者文件(f=open(‘test.log’,’w’)),默认为sys.stderr。若同时列出了filename和stream两个参数,则stream参数会被忽略。?format参数中可能用到的格式化串:

%(name)s Logger的名字
%(levelno)s 数字形式的日志级别
%(levelname)s 文本形式的日志级别
%(pathname)s 调用日志输出函数的模块的完整路径名,可能没有
%(filename)s 调用日志输出函数的模块的文件名
%(module)s 调用日志输出函数的模块名
%(funcName)s 调用日志输出函数的函数名
%(lineno)d 调用日志输出函数的语句所在的代码行
%(created)f 当前时间,用UNIX标准的表示时间的浮 点数表示
%(relativeCreated)d 输出日志信息时的,自Logger创建以 来的毫秒数
%(asctime)s 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒
%(thread)d 线程ID。可能没有
%(threadName)s 线程名。可能没有
%(process)d 进程ID。可能没有
%(message)s用户输出的消息

 

4.使用日志字典配置

logging.config.dictConfig(LOGGING_DIC) # 自动加载字典中的配置 logger1 = logging.getLogger(‘asajdjdskaj‘) logger1.debug(‘好好的 不要浮躁 努力就有收获‘)

三、hashlib模块(加密的模块)

1.算法介绍

Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等。

什么是摘要算法呢?摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。

摘要算法就是通过摘要函数f()对任意长度的数据data计算出固定长度的摘要digest,目的是为了发现原始数据是否被人篡改过。

摘要算法之所以能指出数据是否被篡改过,就是因为摘要函数是一个单向函数,计算f(data)很容易,但通过digest反推data却非常困难。而且,对原始数据做一个bit的修改,都会导致计算出的摘要完全不同。

我们以常见的摘要算法MD5为例,计算出一个字符串的MD5值:

import hashlib

md5 = hashlib.md5() md5.update(‘how to use md5 in python hashlib?‘) print md5.hexdigest()

计算结果如下: d26a53750bc40b38b65a520292f69306

2.hashlib模块分析

import hashlib # 这个加密的过程是无法解密的

md = hashlib.sha() # 生成一个帮你造密文的对象

md.update(‘hello‘) # 往对象里传明文数据 update只能接受bytes类型的数据

md.update(‘hello‘.encode(‘utf-8‘)) # 往对象里传明文数据 update只能接受bytes类型的数据

md.update(b‘hello‘) # 红色处两者是等价的

print(md.hexdigest()) # 获取明文数据对应的明文

注意:

1.不用的算法 使用方法是相同的,

密文的长度越长,内部对应的算法越复杂

但是:

1.时间消耗越长 2.占用空间更大 通常情况下使用md5算法 就可以足够了

传入的内容 可以分多次传入 只要传入的内容相同 那么生成的密文肯定相同

import hashlib

md = hashlib.md5()

md.update(b‘areyouok?‘)

print(md.hexdigest()) # 408ac8c66b1e988ee8e2862edea06cc7

与
md.update(b‘are‘)

md.update(b‘you‘)

md.update(b‘ok?‘)

print(md.hexdigest()) # 408ac8c66b1e988ee8e2862edea06cc7

3.hashlib模块应用场景

1.密码的密文存储 2.校验文件内容是否一致

4.hashlib进阶操作

1.加盐处理

import hashlib

md = hashlib.md5()

#公司自己在每一个需要加密的数据之前 先手动添加一些内容

md.update(b‘oldboy.com‘) # 加盐处理

md.update(b‘hello‘) # 真正的内容

print(md.hexdigest())

2.动态加盐

import hashlib

def get_md5(data):

md = hashlib.md5()

md.update(‘加盐‘.encode(‘utf-8‘))

md.update(data.encode(‘utf-8‘))

return md.hexdigest()

四、openpyxl模块

1.写文件

from openpyxl import Workbook
wb = Workbook()  # 首先生成一个工作蒲
wb1 = wb.create_sheet(‘学习记录‘,0)# 创建一个表单页  后面可以通过数字控制左右位置
wb2 = wb.create_sheet(‘学习心得‘)
wb1.title = ‘login‘  # 后期可以通过.title修改表单页名称

wb1[‘A1‘] = 123  # 可以在表格A3处添加123
wb1[‘A2‘] = 456
wb1[‘A3‘] = ‘=sum(A3:A4)‘  #  求A1与A2的和

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‘,‘‘,‘秃头‘])

wb.save(‘test.xlsx‘)  # 保存文件

wb1.cell(row=,column=,value=)  # row:行  column:列  value:值

2.读文件

from openpyxl import load_workbook  # 读文件

wb = load_workbook(‘test.xlsx‘,read_only=True,data_only=True)
 print(wb) print(wb.sheetnames)  # 返回表单的名字: [‘学习心得‘, ‘Sheet‘, ‘学习记录‘] print(wb[‘login‘][‘A4‘].value) print(wb[‘login‘][‘A5‘].value)  # 通过代码产生的excel表格必须经过人为操作之后才能读取出函数计算出来的结果值

五、深浅拷贝

深浅copy其实就是完全复制一份,和部分复制一份的意思。

1.浅拷贝

import copy

l = [1,2,[1,2]]
l1 = l
print(id(l),id(l1))  # id地址相同
l1 = copy.copy(l)  # 拷贝一份 .......  浅拷贝
print(id(l),id(l1))  # l1与l2的存储地址不同

2.深拷贝

import copy

l = [1,2,[1,2]]

 l[0] = 222
 print(l,l1)
 l[2].append(666)
 print(l,l1)
l1 = copy.deepcopy(l)
l[2].append(666)
print(l,l1)

 

原文地址:https://www.cnblogs.com/xiongying4/p/11215994.html

时间: 2024-10-01 02:28:54

包与常用模块的相关文章

Python学习-基础篇4 模块与包与常用模块

一 模块介绍 1.什么是模块?#常见的场景:一个模块就是一个包含了一组功能的python文件,比如spam.py,模块名为spam,可以通过import spam使用. #在python中,模块的使用方式都是一样的,但其实细说的话,模块可以分为四个通用类别: 1 使用python编写的.py文件 2 已被编译为共享库或DLL的C或C++扩展 3 把一系列模块组织到一起的文件夹(注:文件夹下有一个__init__.py文件,该文件夹称之为包) 4 使用C编写并链接到python解释器的内置模块2.

python模块部分----模块、包、常用模块

0.来源:https://www.cnblogs.com/jin-xin/articles/9987155.html 1.导入模块 1.1模块就是一个python文件,模块名是文件名 1.2导入模块的执行步骤: 先看有没有导入过,有的话不管,没有的话下一步 在sys.path中找到模块(除了内置Python的路径,还有当前执行文件路径) 创建新模块的命名空间,执行一遍模块代码,初始化模块 将模块导入进来 1.3import(导入模块) 直接导入整个模块,模块中的变量全部在他自己的命名空间中,不可

python 中 模块,包, 与常用模块

一 模块 模块:就是一组功能的集合体, 我们的程序可以直接导入模块来复用模块里的功能 导入方式 一般为 : import 模块名 在python中, 模块一般分为四个通用类别 1使用python编写.py 文件 2.已被编译为共享库或DLL 的c 或c++扩展 3把一系列模块组织到一起的文件夹(注:文件夹下有一个__init__.py文件,该文件夹称之为包) 4.使用c编写并链接到python解释器的内置模块 使用模块的优点: 1.从文件级别组织程序, 更方便管理 2.拿来主义, 提升开发效率

python常用模块(模块和包的解释,time模块,sys模块,random模块,os模块,json和pickle序列化模块)

1.1模块 什么是模块: 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,在python中.一个.py文件就称为一个模块(Module) 使用模块的好处: 提高了代码的可维护性. 其次,编写代码不必从零开始.当一个模块编写完毕,就可以被其他地方引用.我们编写程序的时候也经常引用其他模块,包括python的内置的模块和第三方模块. 包(package

Python常用模块——包&跨模块代码调用

Python常用模块--包&跨模块代码调用 一.包(Package) 当你的模块文件越来越多,就需要对模块文件进行划分,比如把负责跟数据库交互的都放一个文件夹,把与页面交互相关的放一个文件夹. my_proj/ ├── apeland_web #代码目录 │ ├── __init__.py │ ├── admin.py │ ├── apps.py │ ├── models.py │ ├── tests.py │ └── views.py ├── manage.py └── my_proj #配置

python入门:常用模块—模块,包介绍

一.什么是模块 为了编写可维护的代码,把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,编程语言采用这种组织方式.在python中,一个.py文件就称之为一个模块. 二.使用模块有什么好处 最大的好处是大大提高了代码的可维护性.其次,编写代码不必从零开始.当一个模块编写完毕,就可以被其他地方引用.经常引用其他模块,包括Python内置的模块和来自第三方的模块 使用模块还可以避免函数名和变量名冲突.每个模块有独立的命名空间 三.模块分类 内置标准模块(又称标准库)执行hel

PYTHON常用模块和包

模块 '''模块:一系列功能的集合体?常见的四种模块:1.使用python编写的.py文件2.把一系列模块组织到一起的文件夹(注:文件夹下有一个__init__.py文件,该文件夹称之为包)3.使用C编写并链接到python解释器的内置模块4.已被编译为共享库或DLL的C或C++扩展''' 模块的搜索路径 '''搜索顺序:内存 => 内置模块 => sys.path?1.导入模块会优先在内存中查找2.内存中没有被加载的话,再去查找内置模块3.还没有查找到,就根据sys.path中的路径顺序逐一

Python之常用模块(六)re模块与logging模块和包

5.10 re模块 re(正则)简介:正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类事物的规则. re元字符 元字符 匹配内容 \w 匹配字母(包含中文)或数字或下划线 \W 匹配非字母(包含中文)或数字或下划线 \s 匹配任意的空白符 \S 匹配任意非空白符 \d 匹配数字 \D 匹配非数字 \A 从字符串开头匹配 \n 匹配一个换行符 \t 匹配一个制表符 ^ 匹配字符串的开始 $ 匹配字符串的结尾 . 匹配任意字符,除了

sublime text3安装 mac os汉化/常用模块

sublime text介绍: Sublime Text 是一个代码编辑器(Sublime Text 2是收费软件,但可以无限期试用),也是HTML和散文先进的文本编辑器.Sublime Text是由程序员Jon Skinner于2008年1月份所开发出来,它最初被设计为一个具有丰富扩展功能的Vim. Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等.还可自定义键绑定,菜单和工具栏.Sublime Text 的主要功能包括:拼写检查,书签,完整