ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

今日内容之8月20号

2021-08-20 22:35:23  阅读:172  来源: 互联网

标签:20 random json 文件夹 内容 logging 模块 今日 os


今日内容之8月20日

概要

内置模块

  • os模块
  • hashlib模块
  • random模块
  • logging模块
  • json模块

详情

必须强调的是

              """创建.py文件时,文件名不能和模块名冲突"""
  • os模块
os模块是与操作系统交互的模块
import os
#文件夹的创建操作
os.mkdir(r'文件夹1') #只能在给定路径下创建单级目录
os.makedirs(r'文件夹2\文件夹3') #可创建多级或单级目录

#文件夹的删除操作
os.rmdir(r'文件夹1')          #删除一级空目录
os.rmdir(r'文件夹2\文件夹3')  #默认只能删除路径下一级空目录
os.removedirs(r'文件2\文件夹3\文件夹4')  #可以删除多级目录,必须确保为空

#查看文件、文件夹
os.listdir()        #查看当前目录下所有的文件与文件夹(包括隐藏的)
os.listdir('D:\\')  #查看制定目录下所有的文件与文件夹(包括隐藏的)
os.getcwd()         #查看当前所在的路径
os.chdir('C:\\Users')    #切换当前所在的路径

#文件、文件夹的判别
返回布尔值
os.path.isdir(r'文件夹1') #判断是否为文件夹
os.path.isfile(r'a.txt')  #判断是否为文件
os.path.exists(r'文件夹2\文件夹3')  #判断当前路径是否存在

#路径拼接
    由于不同操作系统的路径分隔符是不一样的(如Windows系统是\,macOS是/),用简单的字符串拼接文件路径不能很好地兼容不同操作系统。

#拼接路径的函数可有效针对不同操作系统切换路径分隔符
os.path.join('','')

#查看文件大小,以字节数为单位
os.path.getsize(r'a.txt') 

image

  • hashlib模块

    用于加密的模块

将明文数据按照一定的逻辑编写成密文数据,一般由数字与字母随机组合。

常见的加密算法有md5、base64、hmac、sha系列等。#越长越复杂!!!

import hashlib
'''
	一般采用md5加密即可,步骤如下
	1.将待加密的数据传入算法
	2.注意待加密数据必须是二进制即bytes类型(重要)
	3.获取加密之后的密文
'''
# 选择加密算法:md5
md5 = hashlib.md5()
# 将待加密的数据传入算法
md5.update(b'Ultraman Leo')
#获取加密后的密文
res = md5.hexdigest()
print(res)
#以上加密结果   89e49a1f38fd926b64aa85898a12c3ce 

#有时需加密的数据过于简单,可能会被对简单常见数据的穷举“破解”
#这时需进行加盐处理,即在数据前后拼接额外的干扰数据
	md5.update('这是一勺盐'.encode('utf8'))
	md5.update(b'Ultraman Leo')  # 数据必须是bytes类型(二进制)
#以上加密结果   8085b7a728082393ef3dbb7360209659
可以看到两次加密结果完全不同,加盐操作还能使用动态数据(例如时间戳)

image

  • random模块

​ 用于生成随机数的算法

import random
#随机返回一个0-1之间的小数
random.random()       #比如0.20553977729943185
#掷骰子
random.randint(1,6)   #随机返回指定范围的整数,包括首尾
#随机抽取一个选项,可用于抽奖
random.choice(['一等奖','二等奖','谢谢回顾'])    #返回单个字符串
random.choices(['一等奖','二等奖','谢谢回顾'])   #返回包含选项的列表
#随机抽取多个选项,可指定个数
random.sample(['选项一','选项二','选项3',],个数)
#随机打乱元素,可用于洗牌
poker = [3,4,5,6,7,8,9,10,'J','Q','K','smallJoker','largeJoker']
random.shuffle(poker)
print(poker)

image

某搜狗考试题>>>随机验证码:产生一个五位数的验证码,每一位都可以是数字、小写字母、大写字母

  ```python
  def getCode(n):
      code = ''
      for i in range(n):
          '''抽取结果需转换成字符串'''
          #随机抽一个数字
          r1 = str(random.randint(0, 9))
          #随机抽一个大写字母
          r2 = chr(random.randint(65, 90))
          #随机抽一个小写字母
          r3 = chr(random.randint(97, 122))
          #决定是数字还是大写字母还是小写字母
          code += random.choice([r1, r2, r3])
      return code
  print(getCode(5))
  ```

image

  • logging模块

    记录程序运行日志的模块

import logging
#日志分为五级
logging.debug('调试信息')
logging.info('信息')
logging.warning('警告')
logging.error('错误')
logging.critical('重大错误')    #级别最高
默认打印warning级别以上的日志

#初始化日志
logger = logging.getLogger()
#创建一个用于将日志信息写入日志文件的处理器
saveLog = logging.FileHandler('test.log',encoding = 'UTF-8')

#创建第二个用于将日志信息打印到控制台的处理器
printLog = logging.StreamHandler()
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelnames) - %message)s')
#更改最低输出日志级别为debug
saveLog.setLevel(logging.DEBUG)
printLog.setLevel(logging.DEBUG)
#设置日志格式
saveLog.setFormatter(formatter)
printLog.setForrmatter(formatter)
#logger对象可以添加多个处理器对象
logger.addHandler(saveLog)
logger.addHandler(printLog)
#输出日志
logger.debug('debug111')
logger.info('info222')
logger.warning('warning333')
logger.error('error444')
logger.critical('critical555')

image

  • json模块

    能实现常用数据类型与字符串的相互转换,用于不同编程语言的交互

import json
'''语法结构'''
#序列化
json.dumps(变量名)
#反序列化
json.loads(变量名)

userInfo = {'userName': 'Leo', 'passwd': 'UltramanL77'}
序列化方法常用数据类型转化成json格式字符串
res = json.dumps(userInfo)
print(res,type(res))
#打印{"userName": "Leo", "passwd": "UltramanL77"} <class 'str'>
'''只有json格式的字符串前后才会有双引号,这是判断是否是json格式的依据'''
反序列化方法能将json格式字符串转化成对应的数据类型
resDic = json.loads(res)
print(resDic,ype(res))
#打印{'userName': 'Leo', 'passwd': 'UltramanL77'} <class 'str'>

'''序列化能对文件进行'''
with open(r'json1.txt','w',encoding='utf8') as f:
    #将userInfo字典转化成json字符串存放于文件json1.txt中
     json.dump(userInfo,f)

with open(r'json1.txt','r',encoding='utf8') as f:
    #将文件json1.txt中的json字符串转化成字典
     res = json.load(f)
     print(res,type(res))
#打印{'userName': 'Leo', 'passwd': 'UltramanL77'} <class 'dict'>



'''并不是所有的python数据都能转换成json格式的字符串'''
    +-------------------+---------------+
    | Python            | JSON          |
    +===================+===============+
    | dict              | object        |
    +-------------------+---------------+
    | list, tuple       | array         |
    +-------------------+---------------+
    | str               | string        |
    +-------------------+---------------+
    | int, float        | number        |
    +-------------------+---------------+
    | True              | true          |
    +-------------------+---------------+
    | False             | false         |
    +-------------------+---------------+
    | None              | null          |
    +-------------------+---------------+


标签:20,random,json,文件夹,内容,logging,模块,今日,os
来源: https://www.cnblogs.com/leguan001/p/15168371.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有