包的概念

1.什么是包?
一个内部含有多个模块文件的文件夹(且其中一个文件为__init__.py文件)

包的具体使用

1,创建包
在python2中创建包时必须含有__init__.py文件,但是在python3中不需要。但是建议我们在任何时候创建包都加入__init__.py文件 2.如果导入包中的部分模块
from 包名 import md1
from 包名 import md1,md2 #跟导入模块操作一样, 3.如果直接导入包名
import 包名
#导入包名 其实就是导入了包下面的__init__.py文件,该文件里有什么变量名都可以通过包名加.的方式执行。

编程思想的转变

1.面条阶段  (新手阶段)
写出的代码像面条一样全部堆积在一起,都在一个文件中 2.函数阶段 (少年阶段)
根据不同的功能 写出不同封装好的函数 然后调用 3.模块阶段 (成熟阶段)
根据不同的功能 拆分成不同模块的py文件,然后在使用的时候互相调用 '''
1.第一阶段比较杂乱无章,把所有的代码都放在一个文件中 比较难管理和维护
2.第二阶段 只是做了一个简单的小分类 在稍微大一点的项目中效率还是很低
3.第三阶段 开发效率高 易读性高 维护成本低
'''

常用内置模块之collections模块 (收集)

1,具名元组:namedtuple
from collections import namedtuple
可以把元组编出一个有名字的
变量名 = namedtuple(元组名,['数据名','数据名'])
print(变量名) # 变成了一个可执行的对象 可以根据数据名传参
res = a('8','9') #用一个变量名接收 a的传参执行结果
print(res) #元组名(数据名='8',数据名='9') 代码展示:
from collections import namedtuple
a = namedtuple('纸牌',['点数','花色'])
res = a('8','红桃')
print(res) # 纸牌(点数='8'花色='红桃')
print(res.点数) # '8'
print(res.花色) # '红桃'
#可以给元组内的数据 有一个明确的名字 2.队列与堆栈:deque
队列:先进先出
堆栈:先进后出
from collections import deque
可以实现在快速在列表头部添加或删除元素
a = deque(['moon','sksk','tom','sum'])
a.append('s1')
a.appendleft('s2')
a.insert(0,'s3')
a.popleft() #直接删除最头部元素
print(a)

常用内置模块之time模块 (时间)

import time
'''
时间的3种表现形式
1.时间戳 秒数(它指的是从19701月1日零时零分零秒至现在时间的总秒数)
2.结构化时间 (主要是给计算机看的)
3.格式化时间(主要是给人看的)
''' import time
print(time.time()) # 打印时间戳 1666170636.043264
print(time.localtime())
# 结构化时间 tm_year=2022, tm_mon=10, tm_mday=19, tm_hour=17, tm_min=10, tm_sec=36, tm_wday=2, tm_yday=292, tm_isdst=0
print(time.strftime('%Y年 %m月 %d日 ')) #2022年 10月 19日
print(time.strftime('%Y %m %d %H %M %S')) #2022 10 19 17 10 36
print(time.strftime('%Y年 %m月 %d日 %H时 %M分 %S秒'))#2022年 10月 19日 17时 10分 36秒
print(time.strftime('%Y %m %d %X')) # 2022 10 19 17 11 42 from datetime import date, datetime
'''
datetime 年月日时分秒
date 年月日
time 时分秒
'''
print(datetime.datetime.now()) #打印 现在的时间 年月日时分秒
print(date.today()) # 打印今天的日期 2022-10-19
print(datetime.today()) # 打印今天的时间 2022-10-19 18:28:21
print(datetime.utcnow()) #打印获取的是世界标准时区的当前时间
c = datetime(2018,5,28,12,21,21)
print(c) #2018-05-28 12:21:21 打印指定的时间 将获取的字符串转换为datetime类型 from datetime import datetime
d = datetime.strptime('2017/9/30','%Y/%m/%d')
print(d) # 2017-09-30 00:00:00
e = datetime.strptime('2017年9月30日星期六','%Y年%m月%d日星期六')
print(e)# 2017-09-30 00:00:00
e=datetime.strptime('2017年9月30日星期六','%Y年%m月%d日星期六')
print(e)# 2017-09-30 00:00:00
h=datetime.strptime('9/30/2017 8:42:50 ','%m/%d/%Y %H:%M:%S ')
print(h)# 2017-09-30 08:42:50
使用关键词strptime 可以把接收到的字符串转换成时间 添加时间
import datetime
a = datetime.date.today() #2022-10-19
b = datetime.timedelta(days = 3) #3 days, 0:00:00
print(a+b) # 2022-10-22
#关键字 timedelta 时间长度的意思 c = datetime.timedelta(minutes=20) # 20分钟的意思
print(a+c)

常用内置模块之random模块 (随机)

import random

random.random() #随机产生0-1之间的小数
random.randint(1,10) #随机产生1-10之间的整数
random.randrange(1,10,2)#随机产生1-10之间的整数 步长为2 13579 默认步长为1
random.choice(['1', '2', '3', '4']) #随机列表中的元素
random.choices(['1', '2', '3', '4']) #随机列表中的元素 并保留原格式['1']
random.sample(['1', '2', '3', '4'],2) #可以设置随机抽取出来几个
# 例如5位数验证码
random.sample(['1', '2', '3', '4','5','6','7','8','9'],5)
#这样可以一次获取5个随机数字 l1 = [1,2,3,4,5,6,7,8,9]
random.shuffle(l1)
print(l1) # [1, 8, 4, 6, 5, 7, 9, 3, 2]
#这样列表内数据已被随机打乱 小练习:
'''产生图片验证码: 每一位都可以是大写字母 小写字母 数字 4位'''
import random
def code1(n):
code = ''
for i in range(n): #n = 循环几次
upper_ = chr(random.randint(65,90)) #随机大写字母
lower_ = chr(random.randint(97,122)) #随机小写字母
num_ = str(random.randint(0,9)) #随机数字
temp = random.choice([upper_,lower_,num_]) # 随机产生的类型
code = code+temp # 每循环一次产生一位
return code res = code1(5)
print(res)

os模块

1.什么是os模块
os模块主要是与代码运行所在的系统打交道的,我们可以在python中使用这个模块,可以做一些文件类的操作。
2.代码展示
import os
1.创建目录(文件夹)
os.mkedir(r'd1')
# 相对路径 在执行文件所在的路径下创建目录 可以创建单级目录
so.makedirs(r'd1/d2/d3') so.makedirs(r'd1')
# 可以创建多级目录 也可以创建单级目录 2.删除目录(文件夹)
os.rmdir(r'd1')
# 可以删除单级目录 前提目录下文件为空
os.removedirs(r'd1/d2')
# 可以一次性删除多级目录 前提目录下文件为空 3.查询文件路径
os.listdir()
# 可以查询当前执行文件所在环境下的所有文件
os.listdir(r'd1/d2')
# 可以查询d2文件里面的所有文件 4.删除/重命名文件
os.rename('d1/123.py',r'd1/321.py')
# 需要填写准确的文件所在位置后 再填写新的名字
os.remove('d1/321.py')
# 删除对应文件 5.动态获取项目根目录
os.path.abspath(__file__)
# 获取执行文件的绝对路径
os.path.dirname(__file__)
# 获取执行文件所在目录路径 6.判断路径是否存在文件(文件,目录)
os.path.exists(r'd1/321.py')
# 判断该文件是否存在 返回结果为布尔值
os.path.exists(r'd1/d2/d3')
# 判断该目录是否存在 范围结果为布尔值
os.path.isfile(r'd1/d2')
# 判断路径是否是文件 如果是文件夹返回 False 是文件返回True 7.拼接路径
s1 = r'd1/d2'
s2 = r'123.py'
os.path.join(s1,s2) #r'd1/d2/123.py'
res = os.path.join(s1,s2)
#使用join方法进行拼接,拼接结果可以赋予变量 8.获取文件大小(字节为单位)
os.path.getsize(r'd1/d2/123.py') # 24
# 返回结果为整数类型 数字

sys模块

import sys

1.sys.path
#获取执行文件的sys.path
2.sys.version
#获取当前文件版本
3.sys.platform
#获取平台信息 res = sys.argv
if len(res) != 3:
print('执行命令缺少了用户名或密码')
else:
username = res[1]
password = res[2]
if username == 'jason' and password == '123':
print('jason您好 文件正常执行')
else:
print('您不是jason无权执行该文件')

json模块

import json

json模块也称之为序列号模块,序列化模块可以打破语言限制实现不同的编程语言之间的数据交互

json是格式化数据的作用

json是字符串类型,并且都是双引号

json相关操作
针对数据
data_1 = {'name':'moon','age':'18'}
json.dumps(data_1)
#将数据转换为json格式 res = json.dumps(data_1)
json.loads(res)
#将json格式再转回数据 json.dumps() #数据转成json 序列化
json.loads() #将json 转为数据 反序列化 json.dump(data_1,f) #专业为文件服务
#直接将转换的数据放入文件中 json.load(f)
#直接将文件里的json格式反序列化输出

json模块的实战练习

用户登录注册功能
import os
import json 1.注册功能
#获取执行文件所在目录
base_dir = os.path.dirname(__file__)
#拼接出db文件夹路径
db_dir = os.path.join(base_air,'db')
#创建db文件夹
if not os.path.isdir(db_dir)
os.mkdir(db)

hashiib加密模块

1.何为加密
将明文文件处理成私密的密文数据,让人无法看懂 更加有安全性
2.判断数据是否被加密
如果是一串没有规律的字符串 里面有(数字,字母,符号等)就是加密数据了
3.密文的长短有什么作用
一般来看密文越长表示使用的加密算法越复杂,也可以说明越安全
4.常见的加密算法有哪些
md5 sha256 sha512 base64 hmac
5.代码实现: import hashiib
md5 = hashiib.md5() # 选择一个加密算法 这里选择为md5
md5.update(b'123456') #传入明文数据,且已二进制的形式传入
res = md5.hexdigest() #获取加密密文
print(res) #5d41402abc4b2a76b9719d911017c592 这就是密文的样式 6,加密算法不变,内容如果相同 那结果肯定相同
import hashlib
md5 = hashlib.md5()
md5.update(b'moon')
md5.update(b'123')
# md5.update(b'moon123') #8aff4877eb76417460c0fc7f84b32566
res = md5.hexdigest()
print(res) 一次性传和分开传,只要内容是一样的 那获得的密文也是一样的 7. 被加密后的数据是不可以解密的
只能从明文变成密文,无法从密文转为明文 8. 加盐处理
在明文中增加干扰项,安全性更加提高
例如 可以在明文前后加入
md5.update('公司设置的干扰项',encode('utf8'))
md5.update(b'传入的明文')
这个干扰项可以是随机变化的,比如 明文的部分内容,比如时间 9. 加密实际运用
1.用户密码加密
2.文件安全性校验
3.文件内容一致性校验
4.超大文件如果加密 (截取部分内容加密 )

subprocess模块

模拟操作系统终端 执行命令并获取结果
import subprocess
res = subprocess.Popen(
'asdas', # 操作系统要执行的命令
shell=True, # 固定配置
stdin=subprocess.PIPE, # 输入命令
stdout=subprocess.PIPE, # 输出结果
)
print('正确结果', res.stdout.read().decode('gbk')) # 获取操作系统执行命令之后的正确结果
print('错误结果', res.stderr) # 获取操作系统执行命令之后的错误结果

logging日志模块

1,日志是什么?
日志就是可以纪录你的每一个操作的记事本
2. 日志的级别
五种级别
DEBUG - 调试模式,应用场景是问题诊断;
INFO - 通常只记录程序中一般事件的信息,用于确认工作一切正常;
WARNING - 打印警告信息,系统还在正常运行;
ERROR - 错误导致某些功能不能正常运行时记录的信息;
CRITICAL - 当发生严重错误,导致应用程序不能继续运行时记录的信息。 3.日志的组成
产生日志
过滤日志
输出日志
日志格式 import logging # 1.日志的产生(准备原材料) logger对象
logger = logging.getLogger('购物车记录')
# 2.日志的过滤(剔除不良品) filter对象>>>:可以忽略 不用使用
# 3.日志的产出(成品) handler对象
hd1 = logging.FileHandler('a1.log', encoding='utf-8') # 输出到文件中
hd2 = logging.FileHandler('a2.log', encoding='utf-8') # 输出到文件中
hd3 = logging.StreamHandler() # 输出到终端
# 4.日志的格式(包装) format对象
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(10) # debug
# 8.记录日志
logger.debug('写了半天 好累啊 好热啊')

日志配置文件

import logging
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'
# 自定义文件路径
LOG_DIR = os.path.join(BASE_DIR,'log')
if not os.path.exists(LOG_DIR):
os.mkdir(LOG_DIR)
logfile_path = os.path.join(LOG_DIR,'atm.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)传递
}, # 当键不存在的情况下 (key设为空字符串)默认都会使用该k:v配置
# '购物车记录': {
# 'handlers': ['default','console'], # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
# 'level': 'WARNING',
# 'propagate': True, # 向上(更高level的logger)传递
# }, # 当键不存在的情况下 (key设为空字符串)默认都会使用该k:v配置
},
} def get_logger(msg):
logging.config.dictConfig(settings.LOGGING_DIC) # 自动加载字典中的配置
logger1 = logging.getLogger(msg)
return logger1

pickle模块

优势:能够序列化python中的所有类型
缺陷:只能够在python中使用,无法跨语言传输 '''
可实现需求,产生一个对象并保存到文件中,取出来还是一个对象
''' 举例说明: class C1:
def __init__(self, name, age):
self.name = name
self.age = age def func(self):
print('func') def func1(self):
print('func1') obj = C1('张无忌',22) import pickle
with open(r'a.txt','wb')as f:
# 存和取 都需要用二进制模式 rb wb
pickle.dump(obj,f)
# 这样就可以把一个对象存入了文件中 with open(r'a.txt','rb')as f:
# 存和取 都需要用二进制模式 rb wb
res = pickle.load(f)
# 这样由使用一个变量把 存入的对象接收出来了 print(res.name) # 张无忌
res.func() # func
#测试完成 是可以之前对象内的数据和方法

python重要内置模块的更多相关文章

  1. Python常用内置模块之xml模块

    xml即可扩展标记语言,它可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言.从结构上,很像HTML超文本标记语言.但他们被设计的目的是不同的,超文本标记语言被设计用来显示 ...

  2. python(八)内置模块logging/os/time/sys/json/pickle

    模块 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护.为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少 ...

  3. python常用内置模块

    #持续更新 #在使用内置模块的时候需要导入,例如import abc,则导入abc模块,当然模块也可以自己写,相当于一个类,后面放到类里说,这个因为环境闲置,有些无法执行,只能理解了 #os系统操作 ...

  4. 16.Python略有小成(内置模块Ⅱ)

    Python(内置模块Ⅱ) 一.规范化开发 一个py文件中 文件加载问题 代码可读性,查询差 要将一个py文件分开,合理的分成多个py文件 配置文件放在一起 : 一些轻易不改变的变量,一般命名 set ...

  5. 15.Python略有小成(内置模块Ⅰ)

    Python(内置模块Ⅰ) 一.序列化模块(很重要) 序列化 : 将一种数据结构(,list,dict...),转化成一个特殊的字符串的过程 我们现在要解决的问题 : 如果有一种特殊的字符串,这个字符 ...

  6. python的内置模块xml模块方法 xml解析 详解以及使用

    一.XML介绍 xml是实现不同语言或程序直接进行数据交换的协议,跟json差不多,单json使用起来更简单,不过现在还有很多传统公司的接口主要还是xml xml跟html都属于是标签语言 我们主要学 ...

  7. python --常用内置模块01

    1.简单了解模块         模块就是我们把装有特定功能的代码进行归类的解构,从代码编写的单位来看我们的程序 从小到大的顺序:一条代码< 语句块<代码块(函数,类) < 模块 我 ...

  8. python的内置模块之os模块方法详解以及使用

    1.getcwd() 获取当前工作路径 import os print(os.getcwd()) C:\python35\python3.exe D:/pyproject/day21模块/os模块.p ...

  9. python的内置模块random随机模块方法详解以及使用案例(五位数随机验证码的实现)

    1.random(self): Get the next random number in the range [0.0, 1.0) 取0到1直接的随机浮点数 import random print( ...

  10. python的内置模块time和datetime的方法详解以及使用(python内的time和datetime时间格式)

    time内置模块的方法 1.time() 时间戳 time() -> floating point number  浮点数 Return the current time in seconds ...

随机推荐

  1. 使用ko安装的nexus想作为maven仓库使用

    默认安装的nexus并不能作为maven仓库使用,只能添加maven仓库来使用,具体可以查看该文档:使用nexus3配置maven私有仓库 https://www.cnblogs.com/sanduz ...

  2. csv2ECharts,**一行命令查看数据趋势图 工具分享**

    csv2ECharts 一行命令查看数据趋势图! 联系:luomgf@163.com,欢迎交流提出建议 只有一个文件,基于shell,实现将CSV格式数据转化为数据图.运维中尝尝需要查看某个监控指标的 ...

  3. css百叶窗

    效果图: css代码块: <style> *{//默认样式清除 margin: 0; padding: 0; } .content{//设置外层div的宽高,超出后隐藏 margin: 1 ...

  4. 关于从Ecplise导入项目到MyEclipse会出现冲突的原因。

    昨天,从网上下了一个Eclipse的小项目导入到MyEclipse中,出现了许多错误. 原因如下. JDK的编译版本和JRE的运行版本不一致导致了这个问题. 在MyEclipse中,对项目进行Buil ...

  5. Python凯撒密码加解密

    #凯撒密码第一个版本 #加密 pxpt=input("请输入明文文本:") for p in pxpt: if 'a'<=p<='z': print(chr(ord(' ...

  6. GitHub Pages 和 Jekyll 笔记

    GitHub Pages 和 Jekyll 笔记 快速创建(使用默认的Jekyll引擎) 1. 新建仓库 新建一个空仓库, 名称为username.github.io, 其中 username 就是你 ...

  7. vue2 解决跨域

    vue2.x 解决跨域 通过devServer将接口代理到本地在开发的时候,需要请求同局域网内的接口,发现直接使用http://对方的ip地址/接口路径,会出现类似下图的跨域报错 找到并打开vue.c ...

  8. shell脚本之一键部署openV~P~N

    提前准备:/root目录下: checkpsw.sh ## 官方提供的自定义脚本,可在http://openvpn.se/files/other/checkpsw.sh下载 openvpn@.serv ...

  9. 多项式回归 & pipeline & 学习曲线 & 交叉验证

    多项式回归就是数据的分布不满足线性关系,而是二次曲线或者更高维度的曲线.此时只能使用多项式回归来拟合曲线.比如如下数据,使用线性函数来拟合就明显不合适了. 接下来要做的就是升维,上面的真实函数是:$ ...

  10. redux中间件

    Redux 中间件 什么是中间件? 中间件本质上就是一个函数,Redux允许我们通过中间件的方式,扩展和增强Redux应用程序,增强体现在对action处理能力上,之前的计数器与弹出框案例中.acti ...