os模块 hashlib模块 random模块 logging模块 json模块
内容概要
os模块
在创建python文件的时候文件名不能跟需要用的模块名字冲突
import os # 创建文件夹 # os.mkdir(r'文件夹01') # 只能创建单级目录 # os.makedirs(r'文件夹02\文件夹03') # 可以创建多级目录 # os.makedirs(r'文件夹03')
# 删除文件夹 # os.rmdir(r'文件夹01') # os.rmdir(r'文件夹02\文件夹03') # 默认只能删一级空目录 # os.removedirs(r'文件夹02\文件夹03\文件夹04') # 可以删除多级空目录
删除了原来的文件夹一号和文件夹02以及其下面的空目录
# 查看 # print(os.listdir()) # 查看指定路径下所有的文件及文件夹
查看了我当前day10文件夹下所有的文件
# print(os.listdir('D:\\')) # 查看指定路径下所有的文件及文件夹
看到了我电脑D盘下面所有的文件夹
# print(os.getcwd()) # 查看当前所在的路径
# 切换当前操作路径
切换成了我现在自定义的路径
# print(os.getcwd()) # 查看当前所在的路径
# 判别 # print(os.path.isdir(r'a.txt')) # 判断是否是文件夹 # print(os.path.isdir(r'文件夹02'))
a.txt不是文件夹所以是false
# print(os.path.isfile(r'a.txt')) # 判断是否是文件 # print(os.path.isfile(r'文件夹03'))
因为a.txt是文件所以判定为true
# print(os.path.exists(r'a.txt')) # 判断当前路径是否存在 # print(os.path.exists(r'文件夹03'))
由于路径存在所以判定都为true
# 路径拼接 """ 不同的操作系统路径分隔符是不一样的 windows是 \ mac是 / """ # res = os.path.join('D:\\','a.txt') # 该方法可以针对不同的操作系统自动切换分隔符 # 文件大小 print(os.path.getsize(r'a.txt')) # 字节数
八个字一个字3个bytle所以24个字节
加密模块 将肉眼看到的数据按照一定的逻辑变成一串你看不懂的数据 一般情况下密文都是由数字字母随机组合而成 加密算法 将明文数据按照一定的逻辑(每个算法内部逻辑都不一样) 加密之后的密文不能反解密出明文 # 常见加密算法:md5 base64 hmac sha系列 """算法生成的密文越长表示该算法越复杂""" import hashlib # 选择加密算法:一般情况下采用md5即可 # md5 = hashlib.md5() # 将待加密的数据传入算法中 # md5.update(b'cyka') # 数据必须是bytes类型(二进制) # 获取加密之后的密文 # res = md5.hexdigest() # print(res)
# 加盐处理:在对用户真实数据加密之前再往里添加额外的干扰数据 # 选择加密算法:一般情况下采用md5即可 # md5 = hashlib.md5() # # 将待加密的数据传入算法中 # # 加盐 # md5.update('可以是固定的盐,也可以是不固定的随便改'.encode('utf8')) # md5.update(b'cyka') # 数据必须是bytes类型(二进制) # # 获取加密之后的密文 # res = md5.hexdigest() # print(res)
# 动态加盐 # 选择加密算法:一般情况下采用md5即可 md5 = hashlib.md5() # 将待加密的数据传入算法中 # 加盐 md5.update('不固定 随机改变'.encode('utf8')) md5.update(b'cyka') # 数据必须是bytes类型(二进制) # 获取加密之后的密文 res = md5.hexdigest() print(res)
随机数模块 import random # 随机返回0-1之间的小数 # print(random.random())
# 随机返回指定区间的整数 包含首尾 # print(random.randint(1,6)) # 掷色子 # 随机抽取一个 # print(random.choices(['一等奖','二等奖','谢谢回顾'])) # 抽奖 # print(random.choice(['一等奖','二等奖','谢谢回顾']))
# 随机抽取指定样本个数 # print(random.sample([111, 222, 333, 444, 555, 666, 777], 2)) # 随机打乱元素 # l = [2, 3, 4, 5, 6, 7, 8, 9, 10, "J", "Q", "K", "A", "小王", "大王"] # random.shuffle(l) # 洗牌 # print(l)
# 随机验证码 """ 产生一个五位数随机验证码(搜狗笔试题) 每一位都可以是数字\小写字母\大写字母 """ def get_code(n): code = '' for i in range(n): # 循环五次决定是几位验证码 # 每一次循环都应该是三选一 # 随机的数字 random_int = str(random.randint(0, 9)) # 随机的小写字母 random_lower = chr(random.randint(97, 122)) # 随机的大写字母 random_upper = chr(random.randint(65, 90)) # 随机选择一个作为一位验证码 temp = random.choice([random_int, random_lower, random_upper]) code += temp return code print(get_code(4))
import logging # 日志级别 # logging.debug('debug message') # logging.info('info message') # logging.warning('warning message') # logging.error('error message') # logging.critical('critical message')
import logging # file_handler = logging.FileHandler(filename='x1.log', mode='a', encoding='utf-8',) # logging.basicConfig( # format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s', # datefmt='%Y-%m-%d %H:%M:%S %p', # handlers=[file_handler,], # level=logging.ERROR # ) # # logging.error('你好') # import time # import logging # from logging import handlers # # sh = logging.StreamHandler() # rh = handlers.RotatingFileHandler('myapp.log', maxBytes=1024,backupCount=5) # fh = handlers.TimedRotatingFileHandler(filename='x2.log', when='s', interval=5, encoding='utf-8') # logging.basicConfig( # format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s', # datefmt='%Y-%m-%d %H:%M:%S %p', # handlers=[fh,sh,rh], # level=logging.ERROR # ) # # for i in range(1,100000): # time.sleep(1) # logging.error('KeyboardInterrupt error %s'%str(i)) import logging logger = logging.getLogger() # 创建一个handler,用于写入日志文件 fh = logging.FileHandler('test.log',encoding='utf-8') # 再创建一个handler,用于输出到控制台 ch = logging.StreamHandler() formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') fh.setLevel(logging.DEBUG) fh.setFormatter(formatter) ch.setFormatter(formatter) logger.addHandler(fh) #logger对象可以添加多个fh和ch对象 logger.addHandler(ch) logger.debug('logger debug message') logger.info('logger info message') logger.warning('logger warning message') logger.error('logger error message') logger.critical('logger critical message')
序列化:将其他数据类型转变成json类型的字符串
import json
res = json.dumps(d)
print(res, type(res))
d1 = {"username": "jason", "pwd": 123}
print(d1)
只有Jason类型的字符串是带双引号的,所以双引号便是判断jason字符串的依据
反序列化:将json类型的字符串转换为对应类型的字符串 with open(r'a.txt', 'r', encoding='utf8') as f: # 文件反序列化 res = json.load(f) print(res, type(res))
json模块的用处
json模块为了在两个系统之间可以互传数据而存在,但不是python所有的数据类型都可以转成json类型的格式
先导入个json在,他的后面加上json.encoder,按住ctrl点击encoder就能看到下图