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&amp;pickle&amp;shelve)模块详解

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

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

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

随机推荐

  1. java虚拟机之引用

    强引用: 类似:object A=new Object();这样的引用,只要强引用还存在,垃圾回收期就永远不会回收被引用的对象,eg:这里的new Oject().   软引用: 一些还有用,但是非必 ...

  2. JS事件委托学习(转)

    JS 事件委托就是利用冒泡原理,把事件加到父级上触发,执行效果. 好处: 1.提高性能 2.新添加的元素还会有之前的事件     <</</</</li></ ...

  3. 『奇葩问题集锦』Fedora ubuntu 下使用gulp 报错 Error: watch ENOSPC 解决方案

    用gulp启动,错误如下 Error: watch ENOSPC at exports._errnoException (util.js:746:11) at FSWatcher.start (fs. ...

  4. 阻止文件不被上传到iCloud-b

    有空用下 http://www.cocoachina.com/bbs/read.php?tid=86244 http://www.ooso.net/archives/617 http://blog.c ...

  5. myeclipse 2014破解

    开始安装的时候已经进行了破解,不知道为什么还是会出现问题,按照下面说的才可以了: http://blog.sina.com.cn/s/blog_7f5862570101oxyv.html

  6. 利用百度编辑器和IIS限制文件上传的大小

    1.百度编辑器的大小限制 针对不同的文件类型限制大小 例如图片是imageMaxSize ,依次类推 /* 前后端通信相关的配置,注释只允许使用多行方式 */ {     /* 上传图片配置项 */ ...

  7. Win10系列:UWP界面布局进阶8

    StackPanel StackPanel能够以水平或垂直的方式整齐地排列位于其内部的元素.通过设置StackPanel的Orientation属性可以定义内部元素的排列方式,当将Orientatio ...

  8. oracle数据类型及其隐式转换

    oracle有三种最基本的数据类型,即字符型.数值型.日期型. oracle提供的单行函数中,针对不同的数据类型,提供大量实用的函数,同时提供一系列数据类型转换函数,如下: 1)to_char     ...

  9. [JavaScript] 将字符串数组转化为整型数组

    var dataStr="1,2,3,4,5";//原始字符串 var dataStrArr=dataStr.split(",");//分割成字符串数组 var ...

  10. C#_GDI+编程教程

    第7章  C#图形图像编程基础 本章主要介绍使用C#进行图形图像编程基础,其中包括GDI+绘图基础.C#图像处理基础以及简单的图像处理技术. 7.1  GDI+绘图基础 编写图形程序时需要使用GDI( ...