random模块python
个人随机验证吗程序:shell
首先保证了字母和数字出现的几率是50% VS 50%,其次是能够订制输出多少位
bash
1 def Captcha(size): 2 Captcha_list = [] 3 for i in range(size): 4 rand_num = random.randint(1, 2) 5 if rand_num == 1: 6 Captcha_list.append(chr(random.randint(65, 90))) 7 elif rand_num == 2: 8 Captcha_list.append(str(random.randint(0, 9))) 9 else: 10 pass 11 return ''.join(Captcha_list)
time模块app
时间日期经常使用的模块有time和datetime,datetime是对time的高级封装dom
时间的格式有三种,互相之间能够进行相互转化,分别是:ide
一、时间戳格式,是一串距1970-01-01至今的秒数time.time();
函数
time.time()
二、时间结构体 time.localtime()工具
time.localtime()
三、格式化后的时间字符串,格式化表达式相似于秘钥对时间进行加密,加密后的效果为格式化的时间,一样也可以使用表达式进行反解
加密
# 日期字符串转成时间戳 string_2_struct = time.strptime("2016/05/22","%Y/%m/%d") print(string_2_struct) #将struct时间对象转成时间戳 struct_2_stamp = time.mktime(string_2_struct) print(struct_2_stamp) # 将utc时间戳转换成struct_time格式 print(time.gmtime(time.time()-86640)) #将utc struct_time格式转成指定的字符串格式 print(time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime()))
shelve模块spa
一个很方便的序列化工具,以key value的形式持久化python对象
# 彻底能够把shelve当作一个文件字典 with shelve.open(filename, flag='c') as sdb: sdb[key] = value
具体的使用其实和字典没什么两样,增改操做就是对shelv_obj[key] = value,删除操做使用del关键字便可
del shelve_obj[key]
logging模块
一些说明:
logging.basicConfig函数各参数:
filename: 指定日志文件名
filemode: 和file函数意义相同,指定日志文件的打开模式,'w'或'a'
format: 指定输出的格式和内容,format能够输出不少有用信息,如上例所示:
%(levelno)s: 打印日志级别的数值
%(levelname)s: 打印日志级别名称
%(pathname)s: 打印当前执行程序的路径,其实就是sys.argv[0]
%(filename)s: 打印当前执行程序名
%(funcName)s: 打印日志的当前函数
%(lineno)d: 打印日志的当前行号
%(asctime)s: 打印日志的时间
%(thread)d: 打印线程ID
%(threadName)s: 打印线程名称
%(process)d: 打印进程ID
%(message)s: 打印日志信息
datefmt: 指定时间格式,同time.strftime()
level: 设置日志级别,默认为logging.WARNING
stream: 指定将日志的输出流,能够指定输出到sys.stderr,sys.stdout或者文件,默认输出到sys.stderr,当stream和filename同时指定时,stream被忽略
1 ''' 2 log_handler = logging.basicConfig(level=logging.DEBUG, 3 format='%(asctime)s [%(levelname)s]: %(message)s', 4 datefmt='%Y%m%d %H:%M:%S', 5 filename=LOG_DIR, 6 filemode='w') 7 ''' 8 # 建立日志对象 9 logger = logging.getLogger('TEST-LOG') 10 11 # 设定日志的底线级别 12 logger.setLevel(logging.DEBUG) 13 14 # 建立日志的文件操做句柄 15 fh = logging.FileHandler(LOG_DIR,encoding='utf-8') 16 fh.setLevel(logging.DEBUG) 17 18 # 设定全局格式表达式 19 formatter = logging.Formatter('%(asctime)s [%(levelname)s]: %(message)s') 20 21 # 加载格式表达式 22 fh.setFormatter(formatter) 23 24 # 启用文件句柄记录日志,实现对日志文件的操做 25 logger.addHandler(fh) 26 27 28 # 记录相应级别的日志,若是低于全局日志底线级别的,则不会被记录 29 logger_obj.info("帐号<%s> 进行了%s操做 金额变化:(%s) 金额%s利息%s 余额为%s" 30 % (srcaccount_data['id'], 31 type, 32 TRANSACTION_TYPE[type]["action"], 33 amount, 34 interest, 35 src_new_balance) 36 )
sys和os模块
1 sys.argv 命令行参数List,第一个元素是程序自己路径 2 sys.exit(n) 退出程序,正常退出时exit(0) 3 sys.version 获取Python解释程序的版本信息 4 sys.maxsize 最大的Int值 5 sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 6 sys.platform 返回操做系统平台名称 7 sys.stdout.write('please:') 8 val = sys.stdin.readline()[:-1] 9 10 os.getcwd() 获取当前工做目录,即当前python脚本工做的目录路径 11 os.chdir("dirname") 改变当前脚本工做目录;至关于shell下cd 12 os.curdir 返回当前目录: ('.') 13 os.pardir 获取当前目录的父目录字符串名:('..') 14 os.makedirs('dirname1/dirname2') 可生成多层递归目录 15 os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推 16 os.mkdir('dirname') 生成单级目录;至关于shell中mkdir dirname 17 os.rmdir('dirname') 删除单级空目录,若目录不为空则没法删除,报错;至关于shell中rmdir dirname 18 os.listdir('dirname') 列出指定目录下的全部文件和子目录,包括隐藏文件,并以列表方式打印 19 os.remove() 删除一个文件 20 os.rename("oldname","newname") 重命名文件/目录 21 os.stat('path/filename') 获取文件/目录信息 22 os.sep 输出操做系统特定的路径分隔符,win下为"\\",Linux下为"/" 23 os.linesep 输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n" 24 os.pathsep 输出用于分割文件路径的字符串 25 os.name 输出字符串指示当前使用平台。win->'nt'; Linux->'posix' 26 os.system("bash command") 运行shell命令,直接显示 27 os.environ 获取系统环境变量 28 os.path.abspath(path) 返回path规范化的绝对路径 29 os.path.split(path) 将path分割成目录和文件名二元组返回 30 os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素 31 os.path.basename(path) 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素 32 os.path.exists(path) 若是path存在,返回True;若是path不存在,返回False 33 os.path.isabs(path) 若是path是绝对路径,返回True 34 os.path.isfile(path) 若是path是一个存在的文件,返回True。不然返回False 35 os.path.isdir(path) 若是path是一个存在的目录,则返回True。不然返回False 36 os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径以前的参数将被忽略 37 os.path.getatime(path) 返回path所指向的文件或者目录的最后存取时间 38 os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间
hmac模块
仍是比较简单的,不过,不管是加密的key仍是加密的value都须要是bytes类型
.new()须要传入key也就是加密的口令
.update()是传入加密的明文
.hexdigest()是以16进制的字符显示加密后的密码
account = input("请输入帐号:") password = input("请输入密码:") encrypt = hmac.new(bytes(account.encode(encoding='utf-8'))) encrypt.update(bytes(password.encode(encoding='utf-8'))) encrypted_password = str(encrypt.hexdigest()) print(encrypted_password)