1、hashlib模块
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
import hashlib md5 = hashlib.md5() #加盐 md5=hashlib.md5(bytes('salt'),encoding='utf-8') md5.update(b'123456') # 必须是bytes类型 转bytes类型 passwd = bytes(passwd,encoding='utf-8') print(md5.hexdigest()) # 123456 MD5的结果 e10adc3949ba59abbe56e057f20f883e 两个实例: import hashlib usr= input('username: ') pwd = input('passwd: ') with open('userinfo') as f: for line in f: username,passwd,job = line.split('|') md5=hashlib.md5() md5.update(bytes(pwd, encoding='utf-8')) pwd=md5.hexdigest() if usr==username and pwd==passwd: print('登陆成功') else: print('用户名或密码错误') f.close() #文件的md5 import hashlib md5=hashlib.md5() with open('test.txt') as f: for line in f: md5.update(bytes(line,encoding='utf-8')) #md5.update 可以对字符串或文件分多次update print(md5.hexdigest())
2、时间模块:
python有三种方式表示时间:时间戳、元组、格式化时间字符串:
(1)时间戳:1970年1月1日00:00:00开始按秒计算的偏移量,返回float类型,如:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
import time print(time.time()) # 1532875990.1858788
(2)元组:
struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天等)
索引(Index) | 属性(Attribute) | 值(Values) |
---|---|---|
0 | tm_year(年) | 比如2011 |
1 | tm_mon(月) | 1 - 12 |
2 | tm_mday(日) | 1 - 31 |
3 | tm_hour(时) | 0 - 23 |
4 | tm_min(分) | 0 - 59 |
5 | tm_sec(秒) | 0 - 60 |
6 | tm_wday(weekday) | 0 - 6(0表示周一) |
7 | tm_yday(一年中的第几天) | 1 - 366 |
8 | tm_isdst(是否是夏令时) | 默认为0 |
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
import time print(time.localtime()) #输出结果 time.struct_time(tm_year=2018, tm_mon=7, tm_mday=29, tm_hour=22, tm_min=55, tm_sec=40, tm_wday=6, tm_yday=210, tm_isdst=0)
(3)格式化时间字符串
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
%y 两位数的年份表示(00-99) %Y 四位数的年份表示(000-9999) %m 月份(01-12) %d 月内中的一天(0-31) %H 24小时制小时数(0-23) %I 12小时制小时数(01-12) %M 分钟数(00=59) %S 秒(00-59) %a 本地简化星期名称 %A 本地完整星期名称 %b 本地简化的月份名称 %B 本地完整的月份名称 %c 本地相应的日期表示和时间表示 %j 年内的一天(001-366) %p 本地A.M.或P.M.的等价符 %U 一年中的星期数(00-53)星期天为星期的开始 %w 星期(0-6),星期天为星期的开始 %W 一年中的星期数(00-53)星期一为星期的开始 %x 本地相应的日期表示 %X 本地相应的时间表示 %Z 当前时区的名称 %% %号本身
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
import time print(time.strftime("%Y-%m-%d %X")) # 2018-07-29 23:00:54 print(time.strftime("%Y-%m-%d %H-%M-%S")) #2018-07-29 23-01-37 print(time.strftime("%Y.%m.%d")) #2018.07.29
3、random模块
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
import random print(random.random()) # 0.05734134949398206 大于0且小于1之间的小数 print(random.uniform(1,5)) # 3.026923245207668 大于1小于5的小数 print(random.randint(1,200)) #随机整数 print(random.randrange(1,200,2)) #随机奇数 print(random.choices((1,[1,2],(1,2)))) #随机选择一个 print(random.sample([1,'23',[4,5]],2)) #列表元素任意2个组合
一个例子:随机验证码
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
def captcha_code(): code='' for i in range(5): num = random.randint(0,9) #大于等于0,小于等于9= alphabet = chr(random.randint(65,90)) add = random.choice([num,alphabet]) code = code+str(add) print(code) captcha_code()
4、logging 模块
import logging logging.debug('debug message') #排错信息 logging.info('info message') #正常信息 logging.warning('warning message') #告警信息 logging.error('error message') #错误信息 logging.critical('critical message') #高级别、严重信息
import logging
logger = logging.getLogger()
fh = logging.FileHandler('test.txt',encoding='utf-8')
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.setLevel(logging.DEBUG)
sh = logging.StreamHandler()
fh.setFormatter(formatter) #文件操作符 和 格式 关联
sh.setFormatter(formatter) #屏幕操作符 和 格式 关联
logger.addHandler(fh) #logger对象和文件操作符 关联
logger.addHandler(sh) #logger对象和屏幕操作符 关联
logger.debug('logger debug message')
logger.info('logger info message')
logger.warning('WARNING warning message')
logger.error('logger error message')
logger.critical('logger critical message')
配置参数:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
logging.basicConfig()函数中可通过具体参数来更改logging模块默认行为,可用参数有: filename:用指定的文件名创建FiledHandler,这样日志会被存储在指定的文件中。 filemode:文件打开方式,在指定了filename时使用这个参数,默认值为“a”还可指定为“w”。 format:指定handler使用的日志显示格式。 datefmt:指定日期时间格式。 level:设置rootlogger(后边会讲解具体概念)的日志级别 stream:用指定的stream创建StreamHandler。可以指定输出到sys.stderr,sys.stdout或者文件(f=open(‘test.log’,’w’)),默认为sys.stderr。若同时列出了filename和stream两个参数,则stream参数会被忽略。 format参数中可能用到的格式化串: %(name)s Logger的名字 %(levelno)s 数字形式的日志级别 %(levelname)s 文本形式的日志级别 %(pathname)s 调用日志输出函数的模块的完整路径名,可能没有 %(filename)s 调用日志输出函数的模块的文件名 %(module)s 调用日志输出函数的模块名 %(funcName)s 调用日志输出函数的函数名 %(lineno)d 调用日志输出函数的语句所在的代码行 %(created)f 当前时间,用UNIX标准的表示时间的浮 点数表示 %(relativeCreated)d 输出日志信息时的,自Logger创建以 来的毫秒数 %(asctime)s 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒 %(thread)d 线程ID。可能没有 %(threadName)s 线程名。可能没有 %(process)d 进程ID。可能没有 %(message)s用户输出的消息
5、sys模块
sys模块是与python解释器交互的一个接口
sys.argv 在外部向程序内部传递参数,命令行参数List,第一个元素是程序本身路径,如 python 1.py 1024,返回的sys.argv[0]>1.py(本身),sys.argv[1]>1024 sys.exit(n) 退出程序,正常退出时exit(0),错误退出sys.exit(1) sys.version 获取Python解释程序的版本信息 sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 sys.platform 返回操作系统平台名称
6、OS模块
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.popen("bash command).read() 运行shell命令,获取执行结果 os.environ 获取系统环境变量 os.path 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的大小