模块1 time,random,os ,hashlib
Posted 谷永辉
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模块1 time,random,os ,hashlib相关的知识,希望对你有一定的参考价值。
模块:就是一个.py 文件,函数只能在一个.py文件里用。
分为:内置模块, 内置再pycharm里
第三方模块,别人开发好的,
自定义模块,自己写的,包含模块调用,包的调用
time模块
用字符串表示时间,‘2017-06-21’是人能够识别的,而计算机则不行,需要转换才行
1.时间戳
import time
print(time.time()) 结果 1498022736.3174474 是从1970年到当前时间的总秒数
时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。
我们运行“type(time.time())”,返回的是float类型。
2.结构化时间表示
import time
print(time.localtime()) #以北京东八区时间为准
--time.struct_time(tm_year=2017, tm_mon=6, tm_mday=21, tm_hour=13, tm_min=30, tm_sec=3, tm_wday=2, tm_yday=172, tm_isdst=0)
import time
print(time.gmtime()) #世界标准时间
4.将结构化时间转化为时间戳 mktime
import time
print(time.mktime(time.localtime())) 结果 1498023470.0
将当地的总时间,计算成总秒数
5.结构化时间 转为 字符串时间
import time
print(time.strftime(\'%Y-%m-%d\',time.localtime())) 结果 2017-06-21
6.字符串时间 转为 结构化时间
import time
print(time.strptime(\'1990-02-01\',\'%Y-%m-%d\'))
结果
time.struct_time(tm_year=1990, tm_mon=2, tm_mday=1, tm_hour=0,
tm_min=0, tm_sec=0, tm_wday=3, tm_yday=32, tm_isdst=-1)
时间戳是计算机能够识别的 ,以 float的形式存在
结构化时间是以元组的形式操作时间,
时间字符串是人能够看懂的
7. asctime 结构化时间(locattime) 转为 字符串时间 ,不需要提供格式,asctime本身有固定的格式
import time
print(time.asctime()) 结果 Wed Jun 21 13:54:56 2017
8.
time.sleep(3) #等待3秒,再执行打印,就是i/o阻塞
print(\'ok\')
=============================================
random 随机模块
1.random ,生成0--1的随机浮点型数字
import random
print(random.random()) 结果 0.9535195458063495 ,每次产生都不一样
2.randint 在范围内随机产生的整形数字
import random
print(random.randint(1,5)) 结果 随机产出1--5之间的整形数字,包含5在内
3.
import random
print(random.randrange(1,5)) #与randint相同,但取不到尾部数字
4.
import random
print(random.choice([1,5,3,\'a\'])) #在列表随机取一个数字
5.
import random
print(random.sample([1,5,3,\'a\'],2)) #在列表内可以指定随机取出几个 结果 随机产生[\'a\', 3]
6.
import random
print(random.uniform(1,3)) #取范围内的float型,
7.
l=[11,22,33,44]
random.shuffle(l) #把之前的列表内元素顺序打乱
print(l) 结构[22, 11, 44, 33]
----------------------------------
chr 是ASCII表中数字 与 字母 的对应关系
ord 是ASCII表中字母 与数字 的对应关系
利用random模块随机验证码
import random
def valdate_code():
ret=\'\'
for i in range(5):
num=random.randint(0,9)
alfa=chr(random.randint(97,122))
alfa1=chr(random.randint(65,90))
s=random.choice([str(num),alfa,alfa1])
ret=ret+s
return ret
print(valdate_code()) ---结果 是随机产生的 Mau8N
=======================
hashlib是个专门提供hash算法的库,其支持openssl 库提供的所有算法,包括md5, sha1, sha224, sha256, sha384, sha512,使用非常简单、方便。md5经常用来做用户密码的存储。而sha1则经常用作数字签名。
1)MD5码
MD5的全称是Message-Digest Algorithm 5(信息-摘要算法)。128位长度。目前MD5是一种不可逆算法。
具有很高的安全性。它对应任何字符串都可以加密成一段唯一的固定长度的代码。
用途:
根据这种唯一性,可以计算两个文件MD5码,判断两个文件是否相同;
md5 = hashlib.md5()
md5.update(b\'gyh\')
print(md5.hexdigest()) # 16进制的方式加密
结果 d6f793b3106b2d35dbb8230265753f13
A 给 B 发送数据,A把 计算数据的md5 ,发送过去 “gyh” ,
B为了确定是否被改动,就计算MD5码来验证,与A的md5来比较是否一样,一样就是没有改动,否则就是改动。
hashlib提供的是不可逆的算法,在数据库里存放的是16进制的加密暗文,当发送时就是明文发送,对方再校验是否被篡改。
如果数据大, 就分多次update
md5 = hashlib.md5()
md5.update(b\'gyh\')
md5.update(b\'adfdfdfdfd\')
print(md5.hexdigest())
结果
f2e59391c71431de1286a5d11ba7e60e
MD5是最常见的摘要算法,速度很快,生成结果是固定的128 bit字节,
通常用一个32位的16进制字符串表示。另一种常见的摘要算法是SHA1,调用SHA1和调用MD5完全类似:
sha1 = hashlib.sha1()
sha1.update(b\'gyh\')
sha1.update(b\'adfdfdfdfd\')
print(sha1.hexdigest())
结果 fc371385bfe232771168cd6406b3458474901e6c
SHA1的结果是160 bit字节,通常用一个40位的16进制字符串表示。
比SHA1更安全的算法是SHA256和SHA512,不过越安全的算法越慢,而且摘要长度更长。
=============================
os模块 是与操作系统提供一个接口
操作系统是向下管理硬件,向上提供接口
import os
print(os.getcwd()) #获取当前的工作目录
结果 C:\\Users\\lenovo\\PycharmProjects\\untitled\\6.21
import os
print(os.mkdir(r\'C:\\Users\\lenovo\\PycharmProjects\\untitled\\6.20\\d.txt\'))
结果,该目录下生成新的 d.txt 文件
import os
print(os.makedirs(r\'C:\\Users\\lenovo\\PycharmProjects\\untitled\\6.20\\p\\k\'))
结果 生成 p 目录下的 k 目录
import os
print(os.rename(r\'C:\\Users\\lenovo\\PycharmProjects\\untitled\\6.21\\c.txt\',\'b.txt\'))
#把目录下的c.txt改成b.txt
import os
print(os.stat(r\'C:\\Users\\lenovo\\PycharmProjects\\untitled\\6.21\\/b.txt\')) #查看文件的所有信息
结果
os.stat_result(st_mode=16895, st_ino=6473924464490971, st_dev=2833053575,
st_nlink=1, st_uid=0, st_gid=0, st_size=0, st_atime=1498030015, st_mtime=1498030015, st_ctime=1498030015)
st_atime 最后一次访问文件的时间
st_mtime 文件的修改时间
st_ctime 创建文件的时间
import os
print(os.path.abspath(r\'C:\\Users\\lenovo\\PycharmProjects\\untitled\\6.21\'))
结果 文件的绝对路径C:\\Users\\lenovo\\PycharmProjects\\untitled\\6.21
import os
print(os.path.split(r\'C:\\Users\\lenovo\\PycharmProjects\\untitled\\6.21\'))
结果 ,把path分割成目录和文件名(\'C:\\\\Users\\\\lenovo\\\\PycharmProjects\\\\untitled\', \'6.21\')
os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素
os.path.basename(path) 返回path最后的文件名。如何path以/或\\结尾,那么就会返回空值。即os.path.split(path)的第二个元素
import os
print(os.path.isabs(r\'C:\\Users\\lenovo\\PycharmProjects\\untitled\\6.21\'))
结果 True 判断路径是否为绝对路径
import os
print(os.path.getsize(r\'C:\\Users\\lenovo\\PycharmProjects\\untitled\\6.21\\b.txt\\1.txt\'))
结果 8 获取文件的大小,
-----------------------
import os
print(os.path.getatime(r\'C:\\Users\\lenovo\\PycharmProjects\\untitled\\6.21\\b.txt\\1.txt\'))
获取文件最后存取时间 结果 1498032094.0046003 是时间戳的形式
import os
print(os.path.getmtime(r\'C:\\
指向的文件或者目录的最后修改时间 结果 1498032094.006605723
import time
print(time.localtime(1498032094.0046003)) #时间戳转为结构化时间
结果 time.struct_time(tm_year=2017, tm_mon=6, tm_mday=21, tm_hour=16, tm_min=1, tm_sec=34, tm_wday=2, tm_yday=172, tm_isdst=0)
print(time.strftime(\'%Y-%m-%d\',time.localtime(1498032094.0046003))) 结果 2017-06-21 # 结构时间转为字符串时间
------------------------------------
以上是关于模块1 time,random,os ,hashlib的主要内容,如果未能解决你的问题,请参考以下文章