python成长之路16——sys os hashlib random
一、sys
用于提供对Python解释器相关的操作:
1 import sys 2 sys.argv 命令行参数list,第一个元素是程序本身的路径 3 sys.version 获取python解释器的版本信息 4 sys.path 返回模块的搜索路径,即可导入模块和包的路径 5 sys.platform 返回操作系统平台的名称 6 sys.stdin 输入相关 7 sys.stdout 输出相关 8 sys.stderr 错误相关 9 sys.exit() 退出程序,正常退出:exit(0)
二、os
用于提供系统级别的操作:
1 import os 2 3 print(os.getcwd()) #pwd 4 os.chdir("/Users/admin/stu179471/") #cd 5 print(os.curdir) #返回当前目录:"." 6 print(os.pardir) #返回上级目录:".." 7 os.makedirs("c/d") #mkdir -p,可递归创建目录,如果目录存在会报错 8 os.removedirs("../c/d") #若d为空则删除d,再向上递归,若c也为空,则删除c,继续向上递归 9 os.mkdir("e") #mkdir没有-p选项,只能创建单级目录 10 os.rmdir("e") #删除单级空目录,若目录不为空则无法删除,会报错 11 print(os.listdir("/Users/admin")) #ls -a,返回值是个list 12 os.remove("../c/123") #删除文件 13 os.rename("db","dbnew") #重命名 14 print(os.stat("dbnew")) #获取文件目录信息 15 print(os.sep) #操作系统特定的路径分隔符,win为"\\",unix为"/" 16 print(os.linesep) #操作系统特定的行终止符,win为"\t\n",unix为"\n" 17 print(os.pathsep) #用于分割文件路径的字符串 18 print(os.name) #当前使用平台,win为'nt',unix为'posix' 19 os.system('ls /Users') #运行shell命令,执行结果直接显示,不需要返回执行结果的时候可以用 20 print(os.environ) #获取系统环境变量 21 print(__file__) 22 print(os.path.abspath(__file__)) #返回绝对路径 23 print(os.path.split(__file__)) #将文件分割成目录和文件名二元组返回 24 print(os.path.dirname(__file__)) #返回文件的目录 25 print(os.path.basename(__file__)) #返回文件的文件名 26 print(os.path.exists(__file__)) #判断文件是否存在 27 print(os.path.isabs(__file__)) #如果path是绝对路径,返回True 28 print(os.path.isfile(__file__)) #如果path是一个存在的文件,返回True 29 print(os.path.isdir(__file__)) #如果path是一个存在的目录,返回True 30 print(os.path.join(__file__,"b","c")) #以"/"为连接符进行拼接 31 print(os.path.getsize(__file__)) #得到文件的大小 32 print(os.path.getatime(__file__)) #得到文件的atime 33 print(os.path.getctime(__file__)) #得到文件的ctime 34 print(os.path.getmtime(__file__)) #得到文件的mtime
三、hashlib
用于加密相关的操作,代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法
1 import hashlib 2 3 ######## md5 ######## 4 5 #MD5是最常见的摘要算法,速度很快,生成结果是一个32位的16进制字符串。 6 md5=hashlib.md5() 7 # md5.update(bytes('admin',encoding="utf-8")) 8 md5.update('admin'.encode(encoding="utf8")) #字符串必须是二进制或者被encoded 9 print(md5.hexdigest()) #32位的16进制字符串 10 11 ######## sha1 ######## 12 13 #SHA1的结果是一个40位的16进制字符串。 14 sha1=hashlib.sha1() 15 sha1.update("admin".encode(encoding="utf8")) 16 print(sha1.hexdigest()) 17 18 ######## sha256 ######## 19 20 #SHA256的结果是用一个64位的16进制字符串。 21 sha256=hashlib.sha256() 22 sha256.update(bytes("admin",encoding="utf8")) 23 print(sha256.hexdigest()) 24 25 ######## sha384 ######## 26 27 #SHA384的结果是用一个97位的16进制字符串。 28 sha384=hashlib.sha384() 29 sha384.update(bytes("admin",encoding="utf8")) 30 print(sha384.hexdigest()) 31 32 ######## sha512 ######## 33 34 #SHA512的结果是用一个130位的16进制字符串。 35 sha512=hashlib.sha512() 36 sha512.update(bytes("admin",encoding="utf8")) 37 print(sha512.hexdigest())
以上加密算法虽然依然非常厉害,但时候存在缺陷,即:通过撞库可以反解。所以,有必要对加密算法中添加自定义key再来做加密。
1 import hashlib 2 3 ######## md5 ######## 4 md5=hashlib.md5() 5 md5.update('admin'.encode(encoding="utf8")) 6 print(md5.hexdigest()) 7 8 #对MD5添加自定义key,再来做加密 9 md5=hashlib.md5(bytes("19she72hR3",encoding="utf8")) 10 md5.update('admin'.encode(encoding="utf8")) 11 print(md5.hexdigest()) 12 13 执行结果: 14 21232f297a57a5a743894a0e4a801fc3 15 419088063ed2326fc9e194d01565aad3
python内置还有一个 hmac 模块,它内部对我们创建 key 和 内容 进行进一步的处理然后再加密
1 import hmac 2 3 h=hmac.new(bytes("2j83n2dusiye72",encoding="utf8")) 4 h.update(bytes('admin',encoding="utf8")) 5 print(h.hexdigest()) 6 7 执行结果: 8 fabd519a5af1533a76126129ad710ab5
四、random
import random print(random.random()) #生成0~1之间的随机数,16位小数 print(random.randint(1,10)) #生成给定范围内随机数,整数 1<=a<=10 print(random.randrange(1,10)) #生成给定范围内随机数,整数 1<=a<10 #生成随机验证码 checkcode='' for i in range(4): cur=random.randrange(0,4) if cur == i: temp=chr(random.randint(65,90)) else: temp=str(random.randint(0,9)) checkcode += temp print(checkcode) 执行结果: 0.9956692186565768 10 4 1Z6U