1.time模块

  1)时间戳

import time
# 通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量
# 偏移量的是float类型
start_time = time.time()
time.sleep(0.5)
stop_time = time.time()
print(stop_time-start_time)

  2)格式化时间

import time
# 格式化时间
# strftime(format[, t]) : 把一个代表时间的元组或者struct_time(如由
# time.localtime()和time.gmtime()返回)转化为格式化的时间字符串
# format默认为:"%a %b %d %H:%M:%S %Y"
# 注意:
# 如果t未指定,将传入time.localtime()
# 如果元组中任何一个元素越界,ValueError的错误将会被抛出
str_time = time.strftime('%Y - %m - %d %X')
print(str_time)

  3)结构化时间

import time
print(time.localtime()) # 本地时区的struct_time
print(time.gmtime()) # UTC时区的struct_time print(time.localtime().tm_year)
print(time.localtime().tm_mon)
print(time.localtime().tm_mday)
# asctime()把一个表示时间的元组或者struct_time表示为
# 这种形式:'Sun Jun 20 23:21:05 1993'
# 如果没有参数,将会将time.localtime()作为参数传入
print(time.asctime()) # ctime([secs]) : 把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式
# 如果参数未给或者为None的时候,将会默认time.time()为参数
# 它的作用相当于time.asctime(time.localtime(secs))
print(time.ctime())

2.datetime模块

  1)获取时间

import datetime
print(datetime.datetime.now())
# 获取当前时间戳并转换成指定格式
print(datetime.date.fromtimestamp(time.time()))

  2)时间加减、替换

import datetime
# 时间加减
# 当前时间 +-3 天
print(datetime.datetime.now() + datetime.timedelta(3))
print(datetime.datetime.now() + datetime.timedelta(-3))
# 当前时间 +3 小时
print(datetime.datetime.now() + datetime.timedelta(hours=3))
# 当前时间 +30 分
print(datetime.datetime.now() + datetime.timedelta(minutes=30))
# 时间替换
c_time = datetime.datetime.now()print(c_time.replace(minute=30,hour=3))

3.random模块

import random
# 随机输出 0-1 之间的浮点数
print(random.random()) # 随机输出 大于等于 x 小于 等于 y 的整数
print(random.randint(1,3)) # 随机输出 大于等于 x 小于 y 的浮点数
print(random.randrange(1,3)) # 输出随机元素
print(random.choice([1,55,666,7,[222,22,'zhang']])) # 随机输出指定个数的元素的列表
print(random.sample([11,22,33,44,55],2)) # 大于x 小于y的小数
print(random.uniform(1,5)) # 重点:
# shuffle()生成乱序
res = [11,22,55,33,44]
random.shuffle(res)
print(res)

练习:生成随机验证码

def code_random(num):
res = ''
for item in range(num):
code1 = str(random.randint(0,9)) # 字符串格式
code2 = chr(random.randint(65,90))
code3 = chr(random.randint(97,122))
res += random.choice([code1,code2,code3])
return res
print(code_random(4))

4.os模块

import os

# 删除文件
os.remove(r'D:\BaiduYunDownload\code\内置模块\11.png') # 列出指定目录下的文件和子目录,返回列表
res = os.listdir(os.path.dirname(__file__))
print(res) # 返回当前文件的根目录
res1 = os.path.dirname(__file__)
print(res1)

5.shutil()模块

# 将文件内容拷贝到另外一个文件中
src = r'D:\BaiduYunDownload\Python3.0 Project\内置模块\a1.log'
dst = r'D:\BaiduYunDownload\Python3.0 Project\内置模块\a2.log'
shutil.copyfileobj(open(dst,'r',encoding='utf-8'),open(src,'w',encoding='utf-8')) # 拷贝文件,目标文件不一定需要存在
shutil.copyfile(src,r'a1_copy.log') # 仅拷贝全向,内容和组、用户不变,目标文件必须存在
shutil.copymode(src,dst) # 拷贝文件和权限
shutil.copystat(src,dst)

6.json模块---序列化和反序列化

import json

dic = {'name':'zhang','age':18,'hobbies':['sleep','play','girl']}
dic_json = json.dumps(dic)
print(dic,type(dic)) # 序列化前时字典
print(dic_json,type(dic_json))   # 序列化之后是str类型

with open(r'json序列化.json','w',encoding='utf-8') as f:
  # 相当于先把字典序列化成字符串再encoding,然后写入文件
res = json.dumps(dic)
f.write(res) # 反序列化
with open(r'json序列化.json','r',encoding='utf-8') as f:
  res = json.load(f) # 相当于先将文件的内容以字符串的格式读出来,再反序列化,还原原先的数据类型格式
  print(res,type(res)) # 和存之前的类型一致 # !!!!强调:
# 无论数据是怎样创建的,只要满足json格式
# 就可以json.loads出来,不一定非要dumps的数据才能loads
# json认双引号,不认单引号,如json文件中字符串用的是单引号将无法读出 # pickle()能用于Python,并且可能不同版本的Python彼此都不兼容
# 因此,只能用Pickle保存那些不重要的数据

了解知识点:

shelve模块比pickle模块简单,只有一个open函数,返回类似字典的对象,可读可写;key必须为字符串,而值可以是python所支持的数据类型

shelve模块

7.sys模块

# sys.argv           命令行参数List,第一个元素是程序本身路径
# sys.exit(n) 退出程序,正常退出时exit(0)
# sys.version 获取Python解释程序的版本信息
# sys.maxint 最大的Int值
# sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
# sys.platform 返回操作系统平台名称 # 进度条
print('[%-15s]' %'#')
print('[%-15s]' %'##')
print('[%-15s]' %'###')
print('[%-15s]' %'####') # 指定宽度
# 第三个%的意义在于取消第二个%的意义
print('%s%%' %(100)) # 进度条实现
import time,sys,random
def show_process(percent,width=50):
if percent > 1:
percent = 1
show_str = ('[%%-%ds]' %width) %(int(width*percent)*'#')
print('\r%s %d%%' %(show_str,int(100*percent)),file=sys.stdout,flush=True,end='') data_size = 10240
recv_size = 0
while recv_size < data_size:
time.sleep(random.random()*1)
recv_size += random.randint(0,1024) percent = recv_size/data_size
show_process(percent,width=50)

8.logging模块

import logging.config
import logging
# 定义日志文件的路径
LOG_PATH = r'D:\code\内置模块\a1.log'
BOSS_LOG_PATH = r'a2.log' # 定义三种日志输出格式
# name为getlogger指定的名字
standard_format = '%(asctime)s -%(levelname)s - role:%(name)s - %(message)s'
simple_format = '%(asctime)s - role:%(name)s - %(message)s' # log配置字典
LOGGING_DIC = {
'version': 1,
'disable_existing_loggers': False,
# 1.定义日志的格式
'formatters': {
'standard': {
'format': standard_format
},
'simple': {
'format': simple_format
},
},
'filters': {},
# 2.定义日志输出的目标:文件或者终端
'handlers': {
# 打印到文件的日志,收集用户操作日志
'access': {
'level': 'INFO',
'class': 'logging.handlers.RotatingFileHandler', # 保存到文件
'formatter': 'standard',
'filename': LOG_PATH, # 用户日志文件路径
'maxBytes': 1024*1024*5, # 日志大小 5M
'backupCount': 5,
'encoding': 'utf-8', # 日志文件的编码,避免中文log乱码
},
# 打印到文件的日志,收集管理员操作日志
'manager': {
'level': 'INFO',
'class': 'logging.handlers.RotatingFileHandler',
'formatter': 'standard',
'filename': BOSS_LOG_PATH, # 管理员日志文件路径
'maxBytes': 1024*1024*5,
'backupCount': 5,
'encoding': 'utf-8',
},
},
'loggers': {
# logging.getLogger(__name__)拿到的logger配置
'': {
# 把上面定义的handler都加上,即把log数据写入文件中
'handlers': ['access','manager'],
'level': 'INFO',
'propagate': False, # 向上(更高level的logger)传递
},
},
} msg = '用户:zhang,登陆了个人门户' def logger(name): # name='atm'
logging.config.dictConfig(LOGGING_DIC) # 导入上面定义的logging配置
logger = logging.getLogger(name)
return logger logger('client').info(msg=msg)

标准日志格式

9.hashlib()模块

  hash:

    一种算法,将传入的内容进过特定的算法计算出一串有数字和字母组成的字符串
  这个字符串叫做哈希值
  特点:  
    1)传入的内容一样,得到的哈希值一样--->实现文件的完整性验证
    2)由哈希值反解成内容--->把密码做成哈希值,不用明文传输
    3)只要使用hash算法,无论校验的内容多大,得到的哈希值不变

使用:

  字符串哈希和文件哈希

import hashlib

msg = 'zhang'
res = hashlib.md5()
res.update(msg.encode('utf-8'))
# # 获取哈希值hexdigest()
print(res.hexdigest()) m = hashlib.md5()
with open(r'a1.log','rb') as f:
for line in f:
m.update(line)
hv = m.hexdigest()
print(hv)

  密码加盐

# 密码加盐
pwd = 'zhang'
m = hashlib.md5()
# 加盐部分
m.update('zssss'.encode('utf-8'))
m.update(pwd.encode('utf-8'))
m.update(''.encode('utf-8'))
print(m.hexdigest())

注意:

  选择不同哈希算法,计算得出的哈希不一样

10.subprocess模块

  系统命令解析模块

import subprocess

obj = subprocess.Popen('dir',
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE
)
# 只能从管道取一次输出的值,第二次取值为空
res1 = obj.stdout.read()
# 读取到的命令结果为二进制格式
# 需要使用相应的编码方式解码
print('正确结果1:',res1.decode('gbk')) res2 = obj.stdout.read()
print('正确结果2:',res2.decode('gbk')) # 获取错误结果
# res3 = obj.stderr.read()
# print('错误结果:',res3.decode('gbk'))

10.re模块

import re

# 匹配非数字、字母和下划线
print(re.findall('\W','as2s3s#%@#_ffw_2'))
# 匹配数字、字母和下划线
print(re.findall('\w','as2s3s#%@#_ffw_2')) # 任意空字符
print(re.findall('\S','as2s3s#%@#_ffw_2'))
# 匹配任意空字符
print(re.findall('\s','as2s33s#%@#_ffw_2')) # 匹配任意非字数
print(re.findall('\D','as3s#%@#_ffw_2'))
# 匹配任意数字 0-9
print(re.findall('\d','as2s3s#%@#_ffw_2')) print(re.findall('\Aalex','aasssalex is asle sb'))
print(re.findall('\Aalex','alex is asle sb')) print(re.findall('^alex','alex is alex sb'))
print(re.findall('sb$','alexsb is shakexsb')) # {n,m}代表左边那一个字符出现m次到n次
print(re.findall('ab?','a ab abb abbb abbbb'))
print(re.findall('ab{0,1}','a ab abb abbb abbbb')) # 零到无穷次
print(re.findall('ab*','a ab abb abbb abbbb'))
print(re.findall('ab{0,}','a ab abb abbb abbbb')) # 一到无穷次
print(re.findall('ab+','a ab abb abbb abbbb'))
print(re.findall('ab{1,}','a ab abb abbb abbbb')) # 贪婪匹配 .*匹配任意长度,任意的字符
print(re.findall('a.*c','abhbhcbsbhs^&&^%bhcbhhc'))
# 第一个a和最后一个c之间的所有字符 # 推荐使用非贪婪匹配 .*?
print(re.findall('a.*?c','asscddd$$#c')) # [] 中括号,匹配一个指定范围内的字符(这一个字符来自于括号内定义的)
print(re.findall('a[0-9]b','a1sb a55b a2b a9b aDb aAb avb arb')) # 当 - 需要在[]当做普通字符用是,只能加在前面或者后面
print(re.findall('a[*+-]b','a+b a-b a2b a9b a*b aAb avb arb')) # 匹配两个字符之间存在一个大写或者小写字母的字符串
print(re.findall('a[A-Za-z]b','a+b a-b a2b a9b a*b aAb avb arb')) # () 分组
print(re.findall('(alex)_sb','alex_sb asddasjjalex_sb')) print(re.findall(
'href="(.*?)"',
'<link id="MainCss" type="text/css" rel="stylesheet" href="/skins/bundle-MountainInk.css"/>'
)) # [] 内的 ^ 代表取反的意思
print(re.findall('a[^A-Za-z]b','a+b a-b a2b a9b a*b aAb avb arb'))

re模块

Python全栈-day15-day16-常用模块的更多相关文章

  1. Python全栈之路----常用模块----hashlib加密模块

    加密算法介绍 HASH       Python全栈之路----hash函数 Hash,一般翻译做“散列”,也有直接音译为”哈希”的,就是把任意长度的输入(又叫做预映射,pre-image),通过散列 ...

  2. Python全栈之路----常用模块----subprocess模块

    我们经常需要通过Python去执行一条系统命令或脚本,系统的shell命令是独立于你的python进程之外的,每执行一条命令,就是发起一个新进程,通过python调用系统命令或脚本的模块在python ...

  3. Python 全栈开发六 常用模块学习

    本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shelve configparser hashlib 一. ...

  4. Python全栈之路----常用模块----软件开发目录规范

    目录基本内容 log  #日志目录 conf  #配置目录 core/luffycity  #程序核心代码目录  #luffycity 是项目名,建议用小写 libs/modules  #内置模块 d ...

  5. Python全栈之路----常用模块----re 模块

    正则表达式就是字符串的匹配规则,在多数编程语言里都有相应的支持,python里对应的模块是 re. re的匹配语法有以下几种 re.match 从头开始匹配 re.search 匹配包含 re.fin ...

  6. Python全栈之路----常用模块----logging模块

    很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误.警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志,loggin ...

  7. Python全栈之路----常用模块----datetime模块详解

    相比于time模块,datetime模块的接口则更直观,更容易调用. datetime模块定义了下面这几个类: datetime.date:表示日期的类,常用的属性有year,month,day: d ...

  8. Python全栈之路----常用模块----xml处理模块

    xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,不过,古时候,在json还没诞生的黑暗年代,大家只能选择用xml呀,至今很多传统公司如金融行业的很多系统的 ...

  9. Python全栈之路----常用模块----序列化(json&pickle&shelve)模块详解

    把内存数据转成字符,叫序列化:把字符转成内存数据类型,叫反序列化. Json模块 Json模块提供了四个功能:序列化:dumps.dump:反序列化:loads.load. import json d ...

  10. Python全栈之路----常用模块----shutil模块

    高级的 文件.文件包.压缩包 处理模块   参考Python之路[第四篇]:模块     #src是原文件名,fdst是新文件名 shutil.copyfileobj(fsrc, fdst[, len ...

随机推荐

  1. Flink – JobManager.submitJob

    JobManager作为actor, case SubmitJob(jobGraph, listeningBehaviour) => val client = sender() val jobI ...

  2. 转:JAVA 的wait(), notify()与synchronized同步机制

    原文地址:http://blog.csdn.net/zyplus/article/details/6672775 转自:https://www.cnblogs.com/x_wukong/p/40097 ...

  3. java常用工具所在的包

    org.apache.commons.lang3:1)StringUtils.isBlank org.springframework.util:1)ResourceUtils.getFile(&quo ...

  4. 20165336 2017-2018-2《Java程序设计》第6周学习总结

    20165336 2017-2018-2<Java程序设计>第6周学习总结 教材学习内容总结 常量池中的数据在程序运行期间再也不允许改变. String s = new String(&q ...

  5. 关系型数据库与NoSQL数据库的优劣

    当大家学习了一定的NoSQL知识以后,了解了现今许多NoSQL数据库(如HBase,MongoDB,Redis等)时,就会觉得关系型数据库可能已经跟不上时代的步伐.其实并不然,关系型数据库的性能绝对不 ...

  6. 基于fiddler实现本地代理完成脚本测试

    配置好fiddler以后,具体操作流程如下: 1.找到后在右边点击AutoResponder,查看,默认情况如下 勾选 2.ctrl+F 搜索 app. 关键字 ,找到后拖到右侧 3.替换本地文件 4 ...

  7. 安全需求-建模归类——By Me

    漏洞与Bug并不等同,他们之间的关系基本可以描述为:大部分的Bug影响功能性,并不涉及安全性,也就不构成漏洞:大部分的漏洞来源于Bug,但并不是全部,它们之间只是有一个很大的交集.可以用如下这个图来展 ...

  8. (4.6)mysql备份还原——深入解析二进制日志(2)binlog参数配置解析

    关键词:binlog配置,binlog参数,二进制日志配置,二进制文件参数配置 关键词:binlog缓存,binlog 刷新 0.bin写入流程 写binlog流程如下:# 数据操作buffer po ...

  9. Hibernate的状态

    最新的Hibernate文档中为Hibernate对象定义了四种状态(原来是三种状态,面试的时候基本上问的也是三种状态),分别是:瞬时态(new, or transient).持久态(managed, ...

  10. Fast-R-CNN

    基于R-CNN和SPP-Net思想,RBG提出了Fast-R-CNN算法.如果选用VGG16网络进行特征提取,在训练阶段,Fast-R-CNN的速度相比RCNN和SPP-Net可以分别提升9倍和3倍: ...