Python基础第十二天——模块的分类、时间模块、随机数模块、摘要算法模块、os模块、时间形式轮换
补充:Python的名称空间它在运行的过程中一遇到新的名字时一定要涉及到名称空间的概念。
一、模块的分类
1、模块的定义:
Python的模块本质上就是一个.py文件,模块里面提供了函数,它们就可以在其它的文件、模块里被调用去执行
2、模块的语法:
import 模块名
3、import的作用:
加载功能,让当前模块认识加载后的模块名,如果要调用该模块下的函数,则必须以“模块名.方法()”的形式去调用。
例:
说明:
之前我们所接触到的time模块,当我们要使用time模块时则在当前模块下输入:import time ,当我们需要用到time模块下的sleep方法时,必须写time.sleep(),而不能直接写sleep(),是因为当前模块下只识别了time这个名字,并不识别sleep名,所以会报错。
4、简单的自定义模块的调用
先自定义一个module1模块,在该模块的代码如下:
然后自定义一个module2模块,在该模块的代码如下:
若要调用module1模块里的foo函数,则必须在module2模块下加上module1.foo()的形式才能调用module1里的foo方法。
5、模块的分类:
python模块分为三类。
(1)内置模块:
定义:它们是内置在python解释器里的,在整个python环境中是看不到它们的。
(2)第三方模块:
定义:别人写好的模块,放到python环境里进行调用。
这些第三方模块在windows中的python的安装位置如下:
(3)自定义模块:
定义:自己写的模块就叫自定义模块。
6、模块的加载顺序:
解释器——>python安装目录下的lib目录下——>自定义路径(当前路径下)
若未找到则导入失败。
二、时间模块
内置模块和第三方模块我们不需要深究,只需要学它们的模块内有哪些方法即可。
1、定义
显示时间的模块
2、时间戳
作用:是交给计算机进行运算的。
定义:是一个浮点型数字,这个数字能够被用于计算,且是从1970年1月1日00:00:00分开始到现在,是以秒为单位作为作为计算。
格式:time.time() #返回当前时间的时间戳。
3、结构化时间
作用:取元信息的
定义:是一个对象,拿到一个时间后,得到它的年、月、日、时、分、秒。
格式1:time.localtime() # 当前时区时间,如果括号内不传秒数则相当于传入当前时间的时间戳,如果传入了秒数则把这个传入的秒数对应的结构化时间给打印出来。
补充:在python中凡是对象的,它后面都有点方法
import time s = time.localtime() print(s) # time.struct_time(tm_year=2017, tm_mon=11, tm_mday=11, tm_hour=16, tm_min=2, tm_sec=19, tm_wday=5, tm_yday=315, tm_isdst=0) # 打印的结果分别对应:年、月、日、时、分、秒、星期、1年内过了多少天、夏令时 print(s.tm_year) print(s.tm_mon) print(s.tm_mday) print(s.tm_hour) print(s.tm_min) print(s.tm_sec) print(s.tm_wday) print(s.tm_yday) print(s.tm_isdst)
格式2:time.gtime() # 世界标准时间 UTC时间
4、时间字符串
作用:给人看的,是一个字符串
(1)strftime方法的格式:
strftime(以什么作为分隔符,结构化时间)
例如:
strftime('%Y-%m-%d',结构化时间) # 分隔符中的 %Y表示年,%m表示月,%d表示天。
(2)striptime方法的格式:
striptime(字符串时间,结构化时间)
例如:
striptime(字符串时间,'%Y-%m-%d') # 例如:striptime('2017-11-11','%Y-%m-%d')
# 其中字符串时间中的符号可以用任意字符表示。
5、几种时间形式的转换
(1)结构化时间转化为时间戳
import time s1 = time.localtime() # 括号内不加秒数,表示得到当前的结构化时间 print(time.mktime(s1))
(2)时间戳转化为结构化时间
import time s1 = time.time() # 得到时间戳 print(time.localtime(s1)) print(time.gmtime(s1))
(3)结构化时间转化字符串时间
import time s1 = time.localtime() # 得到当前结构化时间 print(time.strftime('%Y-%m-%d',s1))
(4)字符串时间转化结构化时间
import time s1 = '2017-11-11' print(time.strptime(s1,'%Y-%m-%d'))
6、小练习
要求:写一个函数,给这个时间字符串传一个天数后显示出时间字符串,让这个字符串时间进行更改。
例如:今天时间字符串为“2017-11-13”,输入3天后,得到的结果为“2017-11-16”
import time s1 = time.localtime() s = time.strftime('%Y-%m-%d',s1) # 得到现在的字符串时间 def change_time(s,d): struct_time = time.strptime(s,'%Y-%m-%d') # 得到结构化时间 stamp_time = time.mktime(struct_time) # 将结构化时间转换为时间戳 new_stamp_time = stamp_time + 3600*24*d # 把得到的时间戳加上一年时间的时间戳 new_str_time = time.strftime('%Y-%m-%d',time.localtime(new_stamp_time)) print(new_str_time) change_time(s,9)
输出结果:
2017-11-23
7、时间模块的其它两个方法:
(1)结构化时间直接转换成固定字符串时间——asctime
asctime:
例:
import time s1 = time.localtime() print(time.asctime(s1))
(2)时间戳转换成固定字符串时间——ctime
ctime:
例:
import time s1 = time.time() print(time.ctime(s1))
8、时间模块的sleep方法
格式:
time.sleep(秒数)
表示程序暂停多少秒,这是IO阻塞,不占CPU
三、random模块
1、定义:
随机数模块
2、random.random()方法
定义:随机返回一个0-1之间的浮点数,且这个数不会大于1
例:
import random print(random.random())
3、random.randint(范围) 方法
定义:取两个数的范围,随机返回一个整数
例:
import random print(random.randint(1,10))
4、random.randrage(范围)方法
定义:取两个数的范围,随机返一个整数,且顾首不顾尾
例:
import random print(random.randrange(1,10))
5、random.choice()方法
定义:对一个固定的数,通过算法实现模拟随机取出这个数里的一个元素
例:
import random print(random.choice([100,'lisa','xiaobai']))
6、random.sample()方法
定义:对一个固定的数,通过算法实现模拟随机取出这个数里的多个元素
格式:random.sample(固定数,取几个元素)
例:
import random print(random.sample([100,'lisa','xiaobai','糖宝','老张','阿卓','小宋','谢公子'],5)) # 随机取出这个列表的5个元素
7、random.uniform()方法
定义:取两个数的范围,随机返回一个浮点数。
例:
import random print(random.uniform(1,2))
8、random.shuffle()方法
定义:打乱次序
例:
import random l = [100,'lisa','xiaobai','糖宝','老张','阿卓','小宋','谢公子'] random.shuffle(l) print(l) # 得到打乱顺序后的列表“l”
9、写一个验证码的程序
要求:验证码必须是5位数,且产生的随机数必须包含大小写字母和数字
import random def security_code(): ret = '' for i in range(5): num = random.randint(0,9) lowercase = chr(random.randint(97,122)) # 得到所有小写字母 capital_letter = chr(random.randint(65,90)) # 得到所有大写字母 s = random.choice([str(num),lowercase,capital_letter]) ret = ret + s return ret print(security_code()) #打印security_code函数的返回值
四、摘要算法——hashlib模块
1、定义
摘要算法模块,把一堆明文通过一个固定的算法转换成一个固定位数的数字(通常用十六进制的字符串表示),目的是为了发现原始数据是否被人篡改过
应用场景:文件一致性校验、登陆
2、hashlib.md5()方法
定义:md5的算法
例:
import hashlib md5_obj = hashlib.md5() md5_obj.update(b'xiaobai') # 摘要处理,把'xiaobai'这个bytes作一个算法转换,然后会得一个结果,另外可以不断update print(md5_obj.hexdigest()) # 把之前所有的摘要的内容通过hexdigest来显示, # 打印结果:9fd00aba1fd30c80c943b1b25065b72d # 十六进制的32位的数字
补充:加盐处理
作用:为了防止撞库,一般拿用户的用户名和公司自己加上去的字符进行摘要算法
例:
五、os模块
1、定义:
与操作系统交互的一个接口
2、os模块常用的方法
(1)os.getcwd()方法
定义:获取当前工作目录,即当前python脚本工作目录
例:
import os print(os.getcwd()) # 打印结果:C:\Users\William\PycharmProjects\Python_Item2\study\day12\os模块
(2)os.chdir()方法
定义:改变当前脚本工作目录,相当于shell下的cd
格式:os.chdir(工作路径)
例:
import os os.chdir(r'C:\Users\William\PycharmProjects\Python_Item2\study\day11') f = open('os模块下的chdir方法.txt','w',encoding='utf-8') f.close() #此时,在day11这个目录下创建了一个叫"os模块下的chdir方法.txt"的文件
(3)os.mkdir()方法
定义:创建单个目录,相当于shell下的mkdir
格式:os.mkdir(目录名)
例:
import os
os.mkdir('xiaobai')
os.mkdir(r'C:\Users\William\PycharmProjects\Python_Item2\study\day11\xiaobai2')
# 在当前目录创建了一个‘xiaobai’的空目录,以及在day11目录下创建了一个‘xiaobai2’的空目录
(4)os.rmdir()方法
定义:删除单个空目录,若目录不为空则无法删除,相当于shell下的rmdir
格式:os.rmdir(目录名)
例:
import os os.rmdir('xiaobai') os.rmdir(r'C:\Users\William\PycharmProjects\Python_Item2\study\day11\xiaobai2') # 删除了当前目录下的‘xiaobai’空目录和删除了day11目录下的‘xiaobai2’空目录
(5)os.curdir()方法
定义:返回当前目录('.')
(6)os.pardir()方法
定义:获取当前目录 的父目录字符串名('..')
(7)os.makedirs()方法
定义:递归创建目录
格式:os.makedirs(目录名1/目录名2/目录名3......)
例:
import os os.makedirs('xiaobai1/xiaobai2/xiaobai3') # 在当前目录下生成了'xiaobai1'、'xiaobai2'、'xiaobai3'这三个目录
(8)os.removedirs()方法
定义:递归删除目录,如果目录为空,则删除,并递归到上一级目录,依此类推
格式:os.removedirs(多级目录)
例:
import os os.removedirs(r'C:\Users\William\PycharmProjects\Python_Item2\study\day12\os模块\xiaobai1\xiaobai2\xiaobai3') # 删除刚刚创建好的'xiaobai1','xiaobai2','xiaobai3'这3个空目录
(9)os.listdir()方法
定义:列出指定目录下的所有文件和目录,包括隐藏文件,并以列表的方式打印
格式:os.listdir(目录路径)
例:
import os day11_dir = os.listdir(r'C:\Users\William\PycharmProjects\Python_Item2\study\day11') print(day11_dir) # 列出了day11_dir目录下的所有文件以及目录
(10)os.remove()方法
定义:删除一个文件
格式:os.remove(指定的文件)
例:
import os os.remove(r'C:\Users\William\PycharmProjects\Python_Item2\study\day11\a.txt') # 把day11目录下的a.txt文件删除掉
(11)os.rename()方法
定义:重命名文件或目录
格式:os.rename(文件名或目录名,新的文件名或目录名)
例:
import os os.rename(r'C:\Users\William\PycharmProjects\Python_Item2\study\day12\os模块\a.txt','b.txt') # 将当前目录下的a.txt文命名为b.txt 文件 os.rename('xiaobai','xiaohei') # 将当前目录下的'xiaobai'目录名命名为'xiaohei'
(12)os.stat()方法
定义:获取目录或文件的信息
格式:os.stat(文件名或目录名)
补充:打印出的效果有点像time模块下的结构化时间,然后可以根据得到的这个返回值.方法取出值。
例:
import os x = os.stat(r'C:\Users\William\PycharmProjects\Python_Item2\study\day12\os模块\xiaohei') print(x) # 打印出了'xiaohei'的信息
输出结果:
os.stat_result(st_mode=16895, st_ino=73464968921867379, st_dev=3125355478, st_nlink=1, st_uid=0, st_gid=0, st_size=0, st_atime=1510625480, st_mtime=1510625480, st_ctime=1510625480)
(13)os.sep方法
定义:输出操作系统特定的路径分隔符,windows下为'‘\\',linux下为'/'
例:
import os print(os.sep)
(14)os.linesep方法
定义:输出当前平台使用的行(hang)终止符
例:
import os print(os.linesep)
(15)os.pathsep方法
定义:输出用于侵害文件路径的字符串,windows下为“;”,linux下为“:”
例:
import os print(os.pathsep)
(16)os.name方法
定义:输出字符串指示当前使用的平台。windows下为“nt”,linux下为“posix”
例:
import os print(os.name)
(17)os.system('bash command')方法
定义:运行shell命令,直接显示
例:
import os os.system('bash command')
(18)os.environ方法
定义:获取系统环境变量
例:
import os print(os.environ) # 得到当前系统的环境变量
输出结果:
environ({'ALLUSERSPROFILE': 'C:\\ProgramData', 'APPDATA': 'C:\\Users\\William\\AppData\\Roaming', 'COMMONPROGRAMFILES': 'C:\\Program Files (x86)\\Common Files', 'COMMONPROGRAMFILES(X86)': 'C:\\Program Files (x86)\\Common Files', 'COMMONPROGRAMW6432': 'C:\\Program Files\\Common Files', 'COMPUTERNAME': 'LAPTOP-E61OFNCB', 'COMSPEC': 'C:\\WINDOWS\\system32\\cmd.exe', 'FPS_BROWSER_APP_PROFILE_STRING': 'Internet Explorer', 'FPS_BROWSER_USER_PROFILE_STRING': 'Default', 'HOMEDRIVE': 'C:', 'HOMEPATH': '\\Users\\William', 'LOCALAPPDATA': 'C:\\Users\\William\\AppData\\Local', 'LOGONSERVER': '\\\\LAPTOP-E61OFNCB', 'NUMBER_OF_PROCESSORS': '4', 'ONEDRIVE': 'C:\\Users\\William\\OneDrive', 'OS': 'Windows_NT', 'PATH': 'C:\\Python\\Python36\\Scripts\\;C:\\Python\\Python36\\;C:\\Windows\\system32;C:\\Windows;C:\\Windows\\System32\\Wbem;C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\;C:\\Program Files (x86)\\NVIDIA Corporation\\PhysX\\Common;C:\\Program Files\\Intel\\WiFi\\bin\\;C:\\Program Files\\Common Files\\Intel\\WirelessCommon\\;C:\\WINDOWS\\system32;C:\\WINDOWS;C:\\WINDOWS\\System32\\Wbem;C:\\WINDOWS\\System32\\WindowsPowerShell\\v1.0\\;C:\\Python\\Python27\\Scripts\\;C:\\Python\\Python27;D:\\MySQL\\mysql-5.7.19-winx64\\bin;C:\\Program Files (x86)\\PBB Reader\\x64\\;C:\\Users\\William\\AppData\\Local\\Microsoft\\WindowsApps;D:\\MySQL\\mysql-5.7.19-winx64\\bin;', 'PATHEXT': '.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY;.PYW', 'PROCESSOR_ARCHITECTURE': 'x86', 'PROCESSOR_ARCHITEW6432': 'AMD64', 'PROCESSOR_IDENTIFIER': 'Intel64 Family 6 Model 78 Stepping 3, GenuineIntel', 'PROCESSOR_LEVEL': '6', 'PROCESSOR_REVISION': '4e03', 'PROGRAMDATA': 'C:\\ProgramData', 'PROGRAMFILES': 'C:\\Program Files (x86)', 'PROGRAMFILES(X86)': 'C:\\Program Files (x86)', 'PROGRAMW6432': 'C:\\Program Files', 'PSMODULEPATH': 'C:\\Program Files\\WindowsPowerShell\\Modules;C:\\WINDOWS\\system32\\WindowsPowerShell\\v1.0\\Modules', 'PUBLIC': 'C:\\Users\\Public', 'PYCHARM_HOSTED': '1', 'PYTHONIOENCODING': 'UTF-8', 'PYTHONPATH': 'C:\\Users\\William\\PycharmProjects\\Python_Item2', 'PYTHONUNBUFFERED': '1', 'SESSIONNAME': 'Console', 'SYSTEMDRIVE': 'C:', 'SYSTEMROOT': 'C:\\WINDOWS', 'TEMP': 'C:\\Users\\William\\AppData\\Local\\Temp', 'TMP': 'C:\\Users\\William\\AppData\\Local\\Temp', 'USERDOMAIN': 'LAPTOP-E61OFNCB', 'USERDOMAIN_ROAMINGPROFILE': 'LAPTOP-E61OFNCB', 'USERNAME': 'William', 'USERPROFILE': 'C:\\Users\\William', 'WINDIR': 'C:\\WINDOWS'})
(19)os.path.abspath()方法
定义:返回path规范的绝对路径
格式:os.path.abspath(文件或目录的路径)
例:
import os x = os.path.abspath('b.txt') print(x)
输出结果:
C:\Users\William\PycharmProjects\Python_Item2\study\day12\os模块\b.txt
(20)os.path.split()方法
定义:将路径分为目录和文件名两个元素,并以元组的方式显示
格式:os.path.split(文件或目录的路径)
例:
import os x = os.path.split(r'C:\Users\William\PycharmProjects\Python_Item2\study\day12\os模块\b.txt') print(x) # 将路径分为目录名和文件名,并以元组的方式显示
输出结果:
('C:\\Users\\William\\PycharmProjects\\Python_Item2\\study\\day12\\os模块', 'b.txt')
(21)os.path.dirname()方法
定义:得到路径的目录名
例:
import os x = os.path.dirname(r'C:\Users\William\PycharmProjects\Python_Item2\study\day12\os模块\b.txt') print(x)
输出结果:
C:\Users\William\PycharmProjects\Python_Item2\study\day12\os模块
(22)os.path.basename()方法
定义:得到路径的文件名
例:
import os x = os.path.basename(r'C:\Users\William\PycharmProjects\Python_Item2\study\day12\os模块\b.txt') print(x)
输出结果:
b.txt
(23)os.path.join()方法
定义:拼接多个路径
格式:os.path.join(路径1,路径2......)
例:
import os s1 = r'C:\Users\William\PycharmProjects\Python_Item2\study' s2 = "day12\\text.txt" ret = s1 + '\\' + s2 ret2 = os.path.join(s1,s2) print(ret2)
输出结果:
C:\Users\William\PycharmProjects\Python_Item2\study\day12\text.txt
(24)os的其它方法
''' os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cd os.curdir 返回当前目录: ('.') os.pardir 获取当前目录的父目录字符串名:('..') os.makedirs('dirname1/dirname2') 可生成多层递归目录 os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推 os.mkdir('dirname') 生成单级目录;相当于shell中mkdir dirname os.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印 os.remove() 删除一个文件 os.rename("oldname","newname") 重命名文件/目录 os.stat('path/filename') 获取文件/目录信息 os.sep 输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/" os.linesep 输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n" os.pathsep 输出用于分割文件路径的字符串 win下为;,Linux下为: os.name 输出字符串指示当前使用平台。win->'nt'; Linux->'posix' os.system("bash command") 运行shell命令,直接显示 os.environ 获取系统环境变量 os.path.abspath(path) 返回path规范化的绝对路径 os.path.split(path) 将path分割成目录和文件名二元组返回 os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素 os.path.basename(path) 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素 os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False os.path.isabs(path) 如果path是绝对路径,返回True os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略 os.path.getatime(path) 返回path所指向的文件或者目录的最后访问时间 os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间 os.path.getsize(path) 返回path的大小 '''