python笔记6:常用模块
模块,模块就是封装了特殊功能的代码。
模块分为三种:
自定义模块
第三方模块
内置模块
1.自定义模块
自定义模块就是自己定义的模块,如何import自定义模块,如下:
(1)主程序与模块程序在同一目录下:
如下面程序结构:
`-- src
|-- mod1.py
`-- test1.py
若在程序test1.py中导入模块mod1, 则直接使用import mod1或from mod1 import *;
(2)主程序所在目录是模块所在目录的父(或祖辈)目录
如下面程序结构:
`-- src
|-- mod1.py
|-- mod2
| `-- mod2.py
`-- test1.py
若在程序test1.py中导入模块mod2
可以使用 from mod2.mod2 import * 或import mod2.mod2.
(3)主程序导入上层目录中模块或其他目录(平级)下的模块
如下面程序结构:
`-- src
|-- mod1.py
|-- mod2
| `-- mod2.py
|-- sub
| `-- test2.py
`-- test1.py
若在程序test2.py中导入模块mod1和mod2。调用方式如下:
import os
import sys
path = os.path.dirname(os.path.dirname(__file__)) #获取test2.py的根目录sub,然后再获取sub的根目录src
sys.path.insert(0, path) #将src目录添加到环境变量
import mod1
import mod2.mod2
当解释器遇到 import 语句,如果模块在当前的搜索路径就会被导入。
搜索路径是一个解释器会先进行搜索的所有目录的列表。如果需要导入模块support,需要把命令放在程序的顶端
- 一个模块只会被导入一次
- python解释器依次从目录中一级级的去寻找所引入的模块
- 寻找模块的过程有点像环境变量,事实上也可以通过定义环境变量的方式来确定搜索的路径
- 搜索路径是python编译或者安装的时候确定的,安装新的库应该也会修改,搜索路径被存储在sys模块中的path变量
2. 第三方模块
如何安装第三方模块,有2种安装方式,如下:
第一种安装方式:
Python3种自带了pip3,Python2.7种自带了pip,前提是需要将pip3(scripts目录)添加环境变量。
pip3 install xxx 安装某个模块
pip list 查看已经安装的模块
pip uninstall xxx模块已卸载
第二种安装方式,手动安装:
先下载安装包,直接百度搜比如说python requests模块
解压安装包
在解压的目录下执行 python setup.py install
3. 内置模块
random模块
import random
print(random.randint(1, 20)) #在1-19之间随机生成一个整数,随机
print(random.choice('abs123')) #随机取一个元素,随机可迭代对象:字符串、字典、list、元组
print(random.sample('abcdfgrtw12', 3)) #随机取几个元素,3是长度,['2', 'a', 'b'],返回结果是list类型
print(random.uniform(1, 9)) #随机浮点数,随机取1-9之间的浮点数,可指定范围,5.8791750348305625
print(random.random()) #随机0-1的浮点数,0.9465901444615425
random.shuffle([1, 2, 3, 4, 5, 6]) #随机打乱list的值,只能是list
生成随机8位验证码,要求必须包含大小写字母及数字
#使用交集判断随机生成的长度为8的数据。是否包含大小写字母和数字
def ran_data_set():
all = string.ascii_letters + string.digits #生成包含大小写+数字
set_u = set(string.ascii_uppercase) #生成所有的大写字母
set_low = set(string.ascii_lowercase) #生成所有的小写字母
set_num = set(string.digits) #生成0-9的数字
res_set = set() #定义一个空set,向set写入随机生成的数据时,保证随机生成的8位元素不重复,导致长度不够8位
while len(res_set) < 8: #当数组的长度小于8时,添加元素到set,去除重复的元素
res_set.add(random.choice(all))
#判断生成的随机数据中是否与大写、小写、数字都有交集
if res_set.intersection(set_u) and res_set.intersection(set_low) and res_set.intersection(set_num): #非0即真非空即真,判断是否包含大小写和数字
res_value = ''.join(res_set) #每个元素之间使用空相拼接
return res_value
else:
return ran_data_set() #如果不包含大写、小写、数字中任意一个,继续调用该函数,生成符合条件的随机数
os模块
常用方法如下:getcmd()、mkdir()、os.path.abspath()、system()、popen()、join()、os.pathdirname()等
import os
print(os.getcwd()) #获取当前py文件所在的工作目录:E:\python_workspace\base-code\day6
os.chdir('../') #更改当前的工作目录
print(os.getcwd()) #更改后的目录:E:\python_workspace\base-code
print(os.mkdir('test01')) #在当前工作目录创建文件夹
print(os.mkdir('E:/python_workspace/base-code/test01')) #在其他目录下创建文件夹时,需要写绝对路径
print(os.makedirs(r'test02\test2')) #创建多层目录,若创建的父目录(test02)不存在,则创建成功
print(os.rmdir('test01')) #删除当前目录下的空文件夹,若文件夹有内容,则删除失败
#print(os.removedirs(r'test02\test2')) #删除多层文件夹,若文件夹下有文件,则删除失败
print(os.remove('ac.py')) #删除文件,若传入文件夹则抛出OSError异常
print(os.rename('a.py', 'ab.py')) #重命令,将a.py更改为ab.py
print(os.listdir('.')) #打印当前目录下所有的文件,返回结果为list
print(os.sep) #获取当前系统的路径分隔符 \
print(__file__) #打印当前文件的绝对路径
print(os.path.abspath('a.py')) #获取a.py的绝对路径
print(os.path.abspath(__file__)) #获取当前文件的绝对路径
print(os.path.dirname(__file__)) #获取当前文件的父级目录(也就是上一级目录信息)
print(os.name) #获取当前系统的名称,win返回的是nt
os模块常用的popen、system、exists、join等。
os.system('ipconfig') #os.sysytem用来执行系统命令,运行ipconfig命令,直接显示
res = os.system('ipconfig) #执行系统命令的返回值,若命令执行成功则返回0 , 命令执行失败返回1
result = os.popen('ipconfig')
print(result) #通过popen方式执行系统命令,返回值:<os._wrap_close object at 0x00000000007D22B0>
print(result.read()) #获取系统执行命令的所有信息
print(os.path.exists('test01')) #判断文件或者目录是否存在,如果存在返回True
print(os.path.isfile('ab.py')) #判断当前目录下,输入的是否是一个文件,如果是文件则返回True
print(os.path.isdir('test01')) #判断是否是一个目录,如果是一个目录则返回True
print(os.path.isabs('')) #如果path是绝对路径,返回True
print(os.path.join('e:', os.sep, 'aa', 'abc.txt')) #拼接路径:e:\aa\abc.txt
print(os.path.join('ac', 'test', 'python')) #ac\test\python
print(os.path.split('python_workspace/base-code/day6')) #分隔目录和文件名,返回结果为元组:('python_workspace/base-code', 'day6')
sys模块
import sys
res = sys.argv #命令行参数,在Terminal输入命令:python rename.py b.txt 123 666 ,res接收到的结果为list,第一个元素是程序本身
sys.exit(0) #退出程序,正常退出时n=0
sys.maxint #最大的int值
sys.path #返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform #返回操作系统平台名称
sys.stdout.write('please:')#向屏幕输出一句话
val = sys.stdin.readline()[:-1]#获取输入的值
time模块
time&datetime模块主要用于时间操作,时间表示方式有:时间戳、格式化时间、时间元组
import time
print(time.time()) #获取当前时间的时间戳
print(time.strftime('%Y%m%d %H%M%S')) #将时间元组转换为 格式化输出的字符串,可以调试自己需要的时间格式
print(time.localtime()) #将时间戳转换为时间元组,若不传时间戳,则默认获取当前时间的时间戳
print(time.localtime(1498056319)) #将时间戳转换为时间元组:time.struct_time(tm_year=2017, tm_mon=6, tm_mday=21, tm_hour=22, tm_min=45, tm_sec=19, tm_wday=2, tm_yday=172, tm_isdst=0)
print(time.mktime(time.localtime())) #将时间元组转换为时间戳
time.sleep(2) #休眠时间
print(time.strptime('20170618 144037', '%Y%m%d %H%M%S')) #将格式化后的时间转换为时间元组
print(time.ctime(1498056319)) #将时间戳转换Wie格式化时间:Wed Jun 21 22:45:19 2017
print(time.asctime()) #将时间元组转换为格式化时间,Wed Jun 21 22:52:37 2017,标准时间
datetime模块
import datetime
print(datetime.datetime.now()) #将当前时间格式化输出,类似time.strftime('%Y%m%d %H%M%S')
print(datetime.datetime.now() + datetime.timedelta(2)) #2天后的时间2017-06-23 22:56:24.150894
print(datetime.datetime.now() + datetime.timedelta(-1)) #1天前的时间2017-06-20 22:56:45.05809
hashlib模块
该模块主要用于加密相关操作,在Python3种代替了md5和sha模块,主要提供SHA1、SHA224、SHA256、SHA384、SHA512、MDS算法等。
md5: 二进制格式的hash
import hashlib
print(bytes('hello', encoding='utf-8')) #将字符串转换为字节,bytes类型
md = hashlib.md5() #创建md5对象,md的返回值:<md5 HASH object @ 0x00000000006C2710>
md.update(b'hello') #将字符串转换为bytes类型,该方法没有返回值
print(md.digest()) #输出二进制格式的hash,加密后的结果:b']A@*\xbcK*v\xb9q\x9d\x91\x10\x17\xc5\x92'
md5: 十六进制hash
import hashlib
print(bytes('hello', encoding='utf-8')) #将字符串转换为字节,bytes类型
md = hashlib.md5() #创建md5对象,md的返回值:<md5 HASH object @ 0x00000000006C2710>
md.update(b'hello') #将字符串转换为bytes类型,该方法没有返回值
print(md.hexdigest()) #输出十六进制格式的hash,加密后的结果:5d41402abc4b2a76b9719d911017c592
SHA1: 十六进制hash
import hashlib
ha = hashlib.sha1() #创建sha1对象
ha.update(b'hello') #进行加密
print(ha.hexdigest()) #输出十六进制格式的hash,加密后的结果:aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d
SHA256: 十六进制hash (SHA224、SHA384、SHA512等加密方法,写法类似,分别创建对应加密方式的对象即可)
import hashlib
ha = hashlib.sha256() #创建sha256对象
ha.update(b'hello')
print(ha.hexdigest()) #输出十六进制格式的hash,加密后的结果:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
使用md5加密方式,对密码进行加密,如下:
import hashlib
def md5_pwd(pwd):
md = hashlib.md5()
md.update(bytes(pwd, encoding='utf-8')) #m.update() 将字符串转换为bytes类型,需要传入bytes类型才可进行加密操作
md_pwd = md.hexdigest() #将加密后的结果以16进制输出
return md_pwd
print(md5_pwd('')) #加密后:e10adc3949ba59abbe56e057f20f883e
加盐
md5对简单密码加密的话,可以通过撞库方法进行破解,可以使用加盐方式对密码再次进行复杂加密,实现方法如下:
import hashlib
#加盐,对密码进行复杂加密
#盐值,由英文、特殊字符、中文随机组成
SALT = 'asdf@#$%^DFG@!随便' def md5_test(pwd):
md = hashlib.md5() #创建md5对象
md.update(bytes(pwd, encoding='utf-8')) #将pwd转换为bytes类型
new_pwd = md.hexdigest() #将加密后的结果进行16进制输出
return new_pwd if __name__ =='__main__':
#在MD5加密的基础上再次进行复杂加密
print(md5_test(''+SALT))
python笔记6:常用模块的更多相关文章
- python笔记之常用模块用法分析
python笔记之常用模块用法分析 内置模块(不用import就可以直接使用) 常用内置函数 help(obj) 在线帮助, obj可是任何类型 callable(obj) 查看一个obj是不是可以像 ...
- python笔记之ZipFile模块
python笔记之ZipFile模块 zipfile模块用来做zip格式编码的压缩和解压缩的,zipfile里有两个非常重要的class, 分别是ZipFile和ZipInfo, 在绝大多数的情况下, ...
- python笔记之Cmd模块
python笔记之Cmd模块 Cmd类型提供了一个创建命令行解析器的框架,默认情况下,它使用readline来进行交互式操作.命令行编辑和命令完成. 使用cmd创建的命令行解释器循环读取输入的所有行并 ...
- 13.python笔记之pyyaml模块
Date:2016-03-25 Title:13.Python笔记之Pyymal模块使用 Tags:Python Category:Python 博客地址:www.liuyao.me 作者:刘耀 YA ...
- python笔记之bisect模块
python笔记之bisect模块 当你决定使用二分搜索时,这个模块会给你带来很大的帮助. 例子 import bisect L = [1,3,3,6,8,12,15] x = 3 #在L中查找x,x ...
- python笔记之itertools模块
python笔记之itertools模块 itertools模块包含创建有效迭代器的函数,可以用各种方式对数据进行循环操作,此模块中的所有函数返回的迭代器都可以与for循环语句以及其他包含迭代器(如生 ...
- python笔记之subprocess模块
python笔记之subprocess模块 [TOC] 从Python 2.4开始,Python引入subprocess模块来管理子进程,以取代一些旧模块的方法:如 os.system.os.spaw ...
- 十八. Python基础(18)常用模块
十八. Python基础(18)常用模块 1 ● 常用模块及其用途 collections模块: 一些扩展的数据类型→Counter, deque, defaultdict, namedtuple, ...
- python基础31[常用模块介绍]
python基础31[常用模块介绍] python除了关键字(keywords)和内置的类型和函数(builtins),更多的功能是通过libraries(即modules)来提供的. 常用的li ...
- python自动化测试学习笔记-4常用模块
常用模块 1.os 2.sys 3.random 4.string 5.time 6.hashlib 一.os模块 os模块主要用来操作文件.目录,与操作系统无关.要使用os模块首先要导入OS模块,用 ...
随机推荐
- IE测试CSS兼容性测试
我们知道IE6~8是现在浏览器的主流.但是由IE6开始,我们已经知道IE并不是完全执行W3C标准.我们在编程的时候往往遇到只兼容某一种浏览器. 我们以前经常使用IE Test进行IE的兼容性测试.但是 ...
- LAMP动态网站实例
Zend Optimizer: 用优化代码的方法来提高PHP应用程序的执行速度.实现的原理是对那些在被最终执行之前由运行编译器(Run-Time Compiler)产生的代码进行优化.一般情况下,执行 ...
- mac os中的一些快捷键使用及基础软件安装
mac os中terminal标签页的切换 Command+Shift+{} { 切换到左边的标签页 } 切换到右边的标签页 普通键盘对应于mac下的按键: CTRL->CONTROL WIN ...
- 运用Unity实现AOP拦截器[结合异常记录实例]
本篇文章将通过Unity实现Aop异常记录功能:有关Unity依赖注入可以看前两篇文章: 1:运用Unity实现依赖注入[结合简单三层实例] 2:运用Unity实现依赖注入[有参构造注入] 另早期 ...
- 001-使用idea开发环境安装部署,npm工具栏,脚本运行
一.概述 参看官方文档:https://ant.design/docs/spec/introduce-cn 其中包含了设计价值观.设计原则.视觉.模式.可视化.动态等. 其中Ant Design 的 ...
- 如何监控Tomcat服务器
如何监控Tomcat服务器 发表于:2009-06-25来源:作者:点击数:2651 标签:tomcatTomcat服务器 在进行 性能测试 时,一般都需要对应用服务器进行监控,监控的指标包括应用服务 ...
- Mybatis学习记录(六)--开发中的小问题
近期開始做项目,期间遇到一些小问题,开此贴记录一下 1.关于order by 今天写一个sql查询语句,用了order by可是一直没效果,后来才发现用了#{}取值,mybatis使用这个的话对于St ...
- Android TCP/IP Socket Test
TCP/IP协议:Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本 ...
- 转: RabbitMQ实现中AMQP与MQTT消息收发异同
转自:http://www.cnblogs.com/lucifer1997/p/9438186.html 实现了AMQP与MQTT(至多一次)后,用多个队列以topic exchange的方式用相同交 ...
- Linux 基础学习(第一节)
IP地址的配置 配置临时IP地址 ifconfig etho 192.168.0.91 255.255.255.0 图形化下面配置IP地址: 重启网卡服务: shell环境配置网卡信息 必备的参数 关 ...