Python模块介绍一

模块讲解

import time

print(time.time())
print(time.strftime('%Y-%m-%d %X')) # 2018-10-25 15:06:16 Y代表year,m为mouth,d为day,x为时间
c = time.localtime(time.time()+3600243)
print(c)

time.struct_time(tm_year=2018, tm_mon=10, tm_mday=25, tm_hour=15, tm_min=7, tm_sec=20, tm_wday=3, tm_yday=298, tm_isdst=0)

struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天等)

时间戳转化为结构化时间localtime/gmtime

gmtime为世界标准时间,一般不使用。

localtime为东八区时间,为我们所在的时间,常使用localtime

print(time.gmtime())
print(time.strptime('2018-10-20','%Y-%m-%d'))

import random
print(random.random()) #输出大于0且小于1之间的小数
print(random.randint(1,6)) # 随机输出大于等于1且小于等于5之间的整数,[1,5]
print(random.randrange(1,3)) # 随机输出大于等于1且小于3之间的整数,[1,3)

print(random.choice([1, '2', [3, 4]])) # 随机取列表中的一个元素,结果为1或者2或者[3,4]
print(random.sample([1, '2', [3, 4]], 2)) # 随机取列表中任意2个元素
print(random.uniform(1, 3)) # 随机取大于1小于3的小数
item = [1, 2, 3, 4, 5]
print(random.shuffle(item)) # 直接输出,什么都没有
random.shuffle(item)
print(item)
print(item) # 再次打印结果和上一次输出结果一样,需要重新打乱才能输出重新排序的列表
random.shuffle(item)
print(item)

#生成5位的随机码
def get_random_number():
s=''
for i in range(5):
num = str(random.randint(0,9))
c1=chr(random.randint(97,122))
c2=chr(random.randint(65,90))
rnum=random.choice([num,c1,c2])
s+=rnum
print(s)
get_random_number()

"""
Hashlib
Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等。
什么是摘要算法呢?摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。
摘要算法就是通过摘要函数f()对任意长度的数据data计算出固定长度的摘要digest,目的是为了发现原始数据是否被人篡改过。
摘要算法之所以能指出数据是否被篡改过,就是因为摘要函数是一个单向函数,计算f(data)很容易,但通过digest反推data却非常困难。
而且,对原始数据做一个bit的修改,都会导致计算出的摘要完全不同。
我们以常见的摘要算法MD5为例,计算出一个字符串的MD5值:
摘要算法应用: 文件一致性校验 、 登录
任何允许用户登录的网站都会存储用户登录的用户名和口令。如何存储用户名和口令呢?方法是存到数据库表中:
name | password
--------+----------
michael | 123456
bob | abc999
alice | alice2008
如果以明文保存用户口令,如果数据库泄露,所有用户的口令就落入***的手里。此外,网站运维人员是可以访问数据库的,也就是能获取到所有用户的口令。

正确的保存口令的方式是不存储用户的明文口令,而是存储用户口令的摘要,比如MD5:
username | password
---------+---------------------------------
michael | e10adc3949ba59abbe56e057f20f883e
bob | 878ef96e86145580c38c87f0410ad153
alice | 99b1c2188db85afee403b1536010c2c9
考虑这么个情况,很多用户喜欢用123456,888888,password这些简单的口令,于是,***可以事先计算出这些常用口令的MD5值,得到一个反推表:
'e10adc3949ba59abbe56e057f20f883e': '123456'
'21218cca77804d2ba1922c33e0151105': '888888'
'5f4dcc3b5aa765d61d8327deb882cf99': 'password'
这样,无需破解,只需要对比数据库的MD5,***就获得了使用常用口令的用户账号。
对于用户来讲,当然不要使用过于简单的口令。但是,我们能否在程序设计上对简单口令加强保护呢?
由于常用口令的MD5值很容易被计算出来,所以,要确保存储的用户口令不是那些已经被计算出来的常用口令的MD5,这一方法通过对原始口令加一个复杂字符串来实现,俗称“加盐”:1
hashlib.md5("salt".encode("utf8")) #“加盐”的内容此时是salt,也可以为账户名xuyaping,字符串a,数字1等等
经过Salt处理的MD5口令,只要Salt不被***知道,即使用户输入简单口令,也很难通过MD5反推明文口令。

但是如果有两个用户都使用了相同的简单口令比如123456,在数据库中,将存储两条相同的MD5值,这说明这两个用户的口令是一样的。

有没有办法让使用相同口令的用户存储不同的MD5呢?

如果假定用户无法修改登录名,就可以通过把登录名作为Salt的一部分来计算MD5,从而实现相同口令的用户也存储不同的MD5。

摘要算法在很多地方都有广泛的应用。要注意摘要算法不是加密算法,不能用于加密(因为无法通过摘要反推明文),只能用于防篡改,

但是它的单向计算特性决定了可以在不存储明文口令的情况下验证用户口令。

"""
import hashlib
md5=hashlib.md5()
md5.update('how to use md5'.encode('utf-8'))
print(md5.hexdigest())

"""
os模块是与操作系统交互的一个接口
os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
os.chdir()  当前目录
os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cd
os.curdir 返回当前目录: ('.'),相当于shell下cd.
os.pardir 获取当前目录的父目录字符串名:('..'),相当于shell下cd.. 返回上一层目录
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的大小

五 sys模块
sys.argv 命令行参数List,第一个元素是程序本身路径
sys.exit(n) 退出程序,正常退出时exit(0)
sys.version 获取Python解释程序的版本信息
sys.maxint 最大的Int值
sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform 返回操作系统平台名称
"""

猜你喜欢

转载自blog.51cto.com/6000734/2308941