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. [qemu][cloud][centos][ovs][sdn] centos7安装高版本的qemu 以及 virtio/vhost/vhost-user咋回事

    因为要搭建ovs-dpdk,所以需要vhost-user的qemu centos默认的qemu与qemu-kvm都不支持vhost-user,qemu最高版本是2.0.0, qemu-kvm最高版本是 ...

  2. [development][lockless][dpdk] 无锁队列

    dpdk: http://dpdk.org/doc/guides/prog_guide/ring_lib.html#ring-library linux: https://lwn.net/Articl ...

  3. SQL union介绍

    UNION 操作符用于合并两个或多个 SELECT 语句的结果集 UNION 内部的 SELECT 语句必须拥有相同数量的列.列也必须拥有相似的数据类型.同时,每条 SELECT 语句中的列的顺序必须 ...

  4. vue脚手架 构建豆瓣App 第一天

    课堂笔记: 项目结构分析: 项目入口:index.html(div#app) 全局vue组件:App.vue(template:div#app) 通过相同id的div,index.html与Appvu ...

  5. nodejs 学习五 单元测试一

    一. chai chai 自身是依赖nodejs的 assert,让检测更加语义化. chai 采用两种模式,TDD和BDD, TDD是类似自然语言方式 BDD是结构主义 chai文旦地址 二.moc ...

  6. Log4j rootLogger配置

    Log4j 根配置语法 log4j.rootLogger = [ level ] , appenderName, appenderName, … 指代 把指定级别的日志信息输出到指定的一个或者多个位置 ...

  7. 封装 vue 组件的过程

    首先,组件可以提升整个项目的开发效率.能够把页面抽象成多个相对独立的模块,解决了我们传统项目开发的缺点:效率低,难维护,复用性等问题: 然后,使用Vue.extend方法创建一个组件,然后使用 Vue ...

  8. SSH的三种端口转发

    1.本地转发 本地转发,顾名思义就是把本地主机端口转发到远程主机端口. ssh -L 本地主机端口:远程主机:远程主机端口 举例:ssh -L 50000:www.google.com:80 user ...

  9. 如何暂停和继续运行Linux程序

    我们通过shell窗口运行程序时,由于有的程序长时间运行,直到下班了都还没有返回运行结果.这个时候,我们又不能直接关闭shell窗口,不然前面的时间就白白运行了. 那有什么办法可以先暂停程序,明天再继 ...

  10. more 命令

    [root@localhost ~]# .txt # 按页显示文件内容,能向下翻页查看