今日内容:

1. random 模块

2. json模块

3. pickle 模块

4.hashlib 模块

5. hmac 模块

6. shutil 模块

7. shelve 模块

1. random 模块:

random 模块  获取随机值import random

for i in range(10):    print(random.random())  # random.random() 随机获取0~1 之间的数字,不包括0和1,返回的是浮点型0.5319902943759903  0.9539062824026727

随机获取指定范围内的整数值,比如1~10 范围内的整数,包含起始位和结束位for i in range(10):    print(random.randint(1,10))

 随机获取指定范围内的整数,比如1~10 范围内的整数,不包含结束位置for i in range(10):    print(random.randrange(1,10))

 随机获取指定范围内的浮点数,比如1~10 范围内的浮点数,返回类型4.793951896180604for i in range(10):    print(random.uniform(1,10))

random.choice  在item中取值,可以重复,取指定的range('次数')item = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]for i in range(10):    print(random.choice(item),end='')

如果不使用for循环,每次取一个item = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]print(random.choice(item),end='')

random.sample 在item中随机取值,根据传入的数字决定每次取值的个数(此处为每次取4个),range('次数')内放取值的次数item = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]for i in range(10):    print(random.sample(item,4))

打乱   将item列表打乱item = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]random.shuffle(item)print(item)

验证码功能方法1:使用chr找到数字所对应的ascii码表中的字母def random_code(num):               # 传入验证码的位数    code = ""    for i in range(num):            # 循环五次,取5 次值,然后随机再下列三个条件中选择一个。        d = random.randint(65, 90)  # 随机取值后,再在ascii码表中大写字母的位置        x = random.randint(97, 122)  # 随机取值后,再在ascii码表中小写字母的位置        n = random.randint(0, 9)  # 数字是原意字符,直接转str就行        code += random.choice([chr(d), chr(x), str(n)])  # 此处做字符串拼接    return code

res = random_code(5)print(res)

方法2:def random_code(num):    code = ""    for i in range(num):                    # 进入for循环后会随机在1~3之间取值,然后找到相对应的条件,再取值        choose = random.randint(1,3)        if choose == 1:            c = chr(random.randint(65,90))  #  随机取到值后找到对应的acsii码表中的字符        elif choose == 2:            c = chr(random.randint(97,122)) #  随机取到值后找到对应的acsii码表中的字符        else:            c = str(random.randint(0,9))    # 原义字符,直接转成str做字符串拼接用        code += c                           # 此处做字符串拼接。    return code

res = random_code(6)print(res)

方法3此方法有投机取巧的嫌疑。。。def random_code(num):    target = '1234567890QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm'  # 把所有字母数字做成一个字符串    code_list = random.sample(target, num)  # 然后随机抽取指定个数的字符。    return ''.join(code_list)  # 然后使用 .join() 的方法拼接

res = random_code(5)print(res)

2. json模块

json模块import json

json语言,就是一种有语法规范的字符串,用来存放数据的,完成各种语言之间的数据交互1.只能使用{}与[]的组合,{}存放双列信息(与python中的字典类似),而[]存放单列信息(与python中的列表类似)2.{}中的key必须是字符串,而且必须使用" " 来包裹3.{} 与 [] 中支持的值的类型:dict ,list , int , float, bool ,null(类比python中的None), str

案例:json_str = '{"info":1,"msg":[1,"a",true,false,null,3.14]}'obj = json.loads(json_str)    # json.loads 反序列化,可以把字符串类型转换成它本身的类型print(obj, type(obj))         # type()后此处obj的类型就变成了dict类型

序列化: 将对象转换成字符串dumps :只做将对象直接序列化成字符串的工作dump: 不止做将对象序列化成字符串,还做write()功能,将序列化之后的字符串存储到文件中obj = {'name': 'owen', "age": 18, 'height': 180, "gender": "男"}  # 此处对象为字典类型dict# r1 = json.dumps(obj, ensure_ascii=False)                          # 然后使用dumps() 序列化为字符串,并取消默认ascii编码,# print(r1)

# 同该文件的编码(utf-8),python3中默认,python2中需要规定文件头coding:utf-8with open('1.txt','w',encoding='utf-8') as wf:                    # 然后通过'w'模式打开文件   json.dump(obj,wf,ensure_ascii=False)                           # 通过dump()方法来写入文件.(此处dump会把对象序列化并 做write() 的功能,来写入文件中)

反序列化loads :只做将字符串直接反序列化成对象的工作load: 不止做将字符串序列化成对象,还做reda()功能,将反序列化之后的字符串读取出来json_str = '{"name":"owen","age":18,"height":180,"gender":"男"}'r2 = json.loads(json_str,encoding = 'utf-8')   # loads() 将字符串转换为它本身的类型,默认与当前文件的解释器编码一致print(r2,type(r2))

with open('1.txt','r',encoding='utf-8')as rf:    r3 = json.load(rf)    print(r3,type(r3))

3. pickle 模块

pickle 模块为什么有很多序列化和反序列模块因为程序会出现各种各样的对象,如果要将这些对象持久化存储,必须先序列化只有序列化存储后,必须有对应的反序列化,才能保证你存储数据能够内重新读取使用

什么是序列化?:将对象-->转换成字符串为什么要序列化?:用来存储再次使用或者传递给别人使用为什么有很多序列化模块?:存与取的算法可以多种多样,且要配套

 pickle序列化做的是直接转成了二进制,那么pickle的功能比json要广泛,因为json只能序列化文本文件,而pickle全部类型的文件都可以序列化import pickle

obj = {"name": "Owen", "age": 18, "height": 180, "gender": "男"}

序列化 dumps()r1 = pickle.dumps(obj)print(r1)     # 此处返回的是二进制

序列化存储dump()with open('2.txt','wb')as wf:    pickle.dump(obj,wf)

反序列化with open('2.txt', 'rb') as rf:    data = rf.read()    ol = pickle.loads(data)    print(ol, type(ol))

序列化读取load()with open('2.txt','rb') as rf:    ol = pickle.load(rf)    print(ol,type(ol))

4.hashlib 模块

hashlib模块不可逆加密:没有解密的加密方式 md5解密方式:碰撞解密加密的对象:用于传输的数据(字符串类型的数据)import hashliblock = hashlib.md5()

data = '变有钱'lock.update(data.encode('utf-8'))   # 此处声明utf-8是为了告诉hashlib,此处是以utf-8编码的汉字

res = lock.hexdigest()              # 此处是将加密后的数据以16进制的格式打印出来print(res)                          # 输入结果6bc477bd73049f77b5946f7c18449e65

如果是普通的字母或者数字,可以在字符串前加 b 来声明data = b'qweasdzxc123'lock.update(data)res = lock.hexdigest()print(res)

一次加密:1. 获取加密对象,hashlib.md5() --> lock_obj2. 添加加密数据,lock_obj.update(b'...')...lock_obj.update(b'...')3. 获取加密结果  lock.hexdigest()-->resultlock = hashlib.md5()lock.update(b'')res = lock.hexdigest()print(res)特点:加密的总数居一样,加密结果一样,且算法不变,加密结果长度不变

加盐加密1. 保证原数据过于简单,通过复杂的盐也可以提高解密难度2. 即使被碰撞解密成功,也不能直接识别盐与有效数据具体的组成lock_obj = hashlib.md5()lock_obj.update(b'goodgoodstudy') # 前盐lock_obj.update(b'123')           # 有效数据lock_obj.update(b'daydayup')      # 后盐res = lock_obj.hexdigest()print(res)

还有一些其他的加密方式lock_obj = hashlib.sha3_256()lock_obj = hashlib.sha3_512()使用情况很少,不一一介绍

5. hmac 模块

import hmac

使用方法hmac.new(arg)   # 必须提供一个参数cipher = hmac.new('加密的数据'.encode('utf-8'))print(cipher.hexdigest())

加前盐cipher = hmac.new('前盐'.encode('utf-8'))cipher.update('加密的数据'.encode('utf-8'))print(cipher.hexdigest())

加后盐cipher = hmac.new('加密的数据'.encode('utf-8'))cipher.update('后盐'.encode('utf-8'))print(cipher.hexdigest())

加前后盐cipher = hmac.new('前盐'.encode('utf-8'))cipher.update('加密的数据'.encode('utf-8'))cipher.update('后盐'.encode('utf-8'))print(cipher.hexdigest())

6. shutil 模块

shutil 模块  #高级的 文件、文件夹、压缩包 处理模块

import shutil

基于路径的文件复制:  shutil.copyfile(a(文件路径),b(新路径))shutil.copyfile(r'D:\python练习\python十万行代码\学day19\2.txt', r'D:\python练习\python十万行代码\学day19\a\b.txt')

基于流(二进制)的文件赋值     # with open('目标文件',rb)as r,open('新文件','wb')as w:with open('day19博客.py','rb') as r,open('target_file.py','wb')as w:    shutil.copyfileobj(r,w)

递归删除目标目录  # 必须传入绝对路径,或者是当前目录下的文件夹或者文件shutil.rmtree(r'D:\python练习\python十万行代码\学day18\a')

文件移动   shutil.move('文件名','新路径+新文件名')shutil.move('target_file.py', 'part1/new_file.py')

文件夹压缩file_name:被压缩后形成的文件名format: 压缩的格式archive_path:要被压缩的文件夹路径shutil.make_archive('file_name','format','archive_path')

案例:shutil.make_archive('abc/my','zip','part1')

文件夹解压unpack_file: 被解压文件    unpack_name: 解压后的名字     format:  解压格式shutil.unpack_archive('unpack_file','unpack_name','format')

案例:shutil.unpack_archive('abc/my.zip','abc/part2','zip')

7. shelve 模块

shelve模块  : 即时存取的序列化模块

import shelve

shv_dic = shelve.open('my.shv')shv_dic['name'] = 'Owen'shv_dic['name'] = 'Zero'shv_dic.close()

shv_dic = shelve.open('my.shv')print(shv_dic['name'])stus = ['张三', '涨姿势']shv_dic['stus'] = stusprint(shv_dic['stus'])shv_dic.close()

shv_dic = shelve.open('my.shv', writeback=True)# 将内容从文件中取出,在内存中添加, 如果操作文件有writeback=True,会将内存操作记录实时同步到文件shv_dic['stus'].append('装13')print(shv_dic['stus'])shv_dic.close()

转载于:https://www.cnblogs.com/liguodeboke/p/10835615.html

python第十九天(random、json、pickle、hashlib、hmac、shutil、shevle模块)相关推荐

  1. 自学Python第十九天-flask框架

    自学Python第十九天-flask框架 安装和引用 使用 创建和运行应用 设置应用 处理函数及路由 另一种路由注册 唯一URL和重定向行为 反向解析 响应 get 和 post 请求 ,以及其他类型 ...

  2. 孤荷凌寒自学python第七十九天开始写Python的第一个爬虫9并使用pydocx模块将结果写入word文档...

    孤荷凌寒自学python第七十九天开始写Python的第一个爬虫9 (完整学习过程屏幕记录视频地址在文末) 今天在上一天的基础上继续完成对我的第一个代码程序的书写. 到今天终于完成了对docx模块针对 ...

  3. python——加解密hashlib/hmac/random/secrets/base64/pycrypto

    目录 一.数据加密概述 1. 网络数据传输面临的威胁 2. 相应的解决方案 二.Python中实现数据加密的模块简介 1. Python内置的加密模块演化过程 2. 相关名词解释 3. 本文要讲解的P ...

  4. Python数据加密与解密相关操作(hashlib、hmac、random、base64、pycrypto)

    本文内容 数据加密概述 Python中实现数据加密的模块简介 hashlib与hmac模块介绍 random与secrets模块介绍 base64模块介绍 pycrypto模块介绍 总结 参考文档 提 ...

  5. Python学习笔记第二十九天(N维数组(ndarray))

    Python学习笔记第二十九天 N维数组(ndarray) 构建阵列 索引阵列 ndarray的内部内存布局 阵列属性 内存布局 数据类型 其他属性 阵列接口 ctypes外部功能接口 Array方法 ...

  6. Python基础 day4 迭代器生成器 装饰器 Json pickle 数据序列化 软件目录结构规范 作业:ATM项目开发...

    本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 列表生成器 1.列表生成式,迭代器&生成器 列表生成式 孩子, ...

  7. 孤荷凌寒自学python第三十九天python 的线程锁Lock

    孤荷凌寒自学python第三十九天python的线程锁Lock (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 当多个线程同时操作一个文件等需要同时操作某一对象的情况发生时,很有可能发生冲突, ...

  8. Python-Day4 Python基础进阶之生成器/迭代器/装饰器/Json pickle 数据序列化

    一.生成器 通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面 ...

  9. python加密模块教程_Python加密模块的hashlib,hmac模块使用解析

    这篇文章主要介绍了Python加密模块的hashlib,hmac模块使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在写搬砖脚本中,碰到一个 ...

最新文章

  1. 玩转Android- 收藏集 - 掘金
  2. vue的路由与es6的import, export
  3. 当当架构部张亮:从码农到大牛,技术与心境的双重提升
  4. 机器学习笔记(六)支持向量机
  5. 获取ArcGIS安装路径
  6. java欧冠抽签,欧冠抽签吐槽:最大的“礼包”被C罗拿走!梅西出局概率超50%?...
  7. C ++ 的 背 影
  8. mysql amoeba 链接111,mycat1.4 amoeba3.0.5 mysql直连对照_mysql
  9. php岗位专业技能,PHP简历专业技能怎么写
  10. 【报告分享】2020年抖音kol生态研究报告.pdf(附下载链接)
  11. 【LeetCode】Maximum Product Subarray 求连续子数组使其乘积最大
  12. 华为机试HJ57:高精度整数加法
  13. sqlserver提权失败_利用mssql模拟登录提权
  14. ModbusTCP助手调试工具Modbus主站调试工具ModbusMaster支持所有Modbus设备调试
  15. 百度离线地图下载和叠加层瓦片切割(工具下载链接已更新)
  16. 计算机作业个人简历word,计算机毕业生个人简历模板word模板
  17. 顺序表(C语言实现)
  18. F28335学习之ADC配置
  19. centos 下mono安装
  20. 读hdfs上的文件时出现Unable to write to output stream问题的解决方案

热门文章

  1. [链表]---链表中环的入口节点
  2. 【Android-NCNN-Vulkan】ncnn-vulkan load param model 速度慢
  3. Python函数式编程简介(一)高阶函数
  4. U盘里的文件夹会以应用程序的方式出现解决
  5. 机器学习 文本分类 代码_无需担心机器学习-如何在少于10行代码中对文本进行分类
  6. 检测和语义分割_分割和对象检测-第2部分
  7. 办理房贷前,名下信用卡必须全部还清吗?
  8. 做一个幸福的“生活家”:谈《心欢喜,灵快乐》
  9. 昨天是欧洲男人的,今天却属于亚洲女人
  10. scrum回顾_3步开好回顾会 | IDCF FDCC认证学员作品