zoukankan      html  css  js  c++  java
  • 序列化模块,随机数模块,os模块,sys模块,hashlib模块

    模块

    json模块

    用于多种语言交互  编程语言中的通用数据

    内置的模块 不需要安装,直接导入使用

    import json  导入一个json模块

    dic = {'1':2}

    s = json.jumps(dic)          将字典对象转换成字符串

    print(types)

    d = json.loads(s)              将字符串转换成字典

    print(d)

    print(type(d))

    json.dump({'1':4,open('a','w',encoding='utf-8'))     写入文件

    d = json.load(open('a','r',encoding='utf-8'))           读文件

    d['1'] = 10                                                              修改文件

    json.dump(d,open('a','w',encoding='utf-8'))           把字典d写入到文件a里

    d = json.load(open('a','r',encoding='utf-8'))           读文件

    print(d)

    import json
    dic = {'k1':'v1','k2':'v2','k3':'v3'}
    str_dic = json.dumps(dic)  #序列化:将一个字典转换成一个字符串
    print(type(str_dic),str_dic)  #<class 'str'> {"k3": "v3", "k1": "v1", "k2": "v2"}
    #注意,json转换完的字符串类型的字典中的字符串是由""表示的
    
    dic2 = json.loads(str_dic)  #反序列化:将一个字符串格式的字典转换成一个字典
    #注意,要用json的loads功能处理的字符串类型的字典中的字符串必须由""表示
    print(type(dic2),dic2)  #<class 'dict'> {'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}
    
    
    list_dic = [1,['a','b','c'],3,{'k1':'v1','k2':'v2'}]
    str_dic = json.dumps(list_dic) #也可以处理嵌套的数据类型 
    print(type(str_dic),str_dic) #<class 'str'> [1, ["a", "b", "c"], 3, {"k1": "v1", "k2": "v2"}]
    list_dic2 = json.loads(str_dic)
    print(type(list_dic2),list_dic2) #<class 'list'> [1, ['a', 'b', 'c'], 3, {'k1': 'v1', 'k2': 'v2'}]
    
    loads和dumps
    
    dumps loads
    import json
    f = open('json_file','w')
    dic = {'k1':'v1','k2':'v2','k3':'v3'}
    json.dump(dic,f)  #dump方法接收一个文件句柄,直接将字典转换成json字符串写入文件
    f.close()
    
    f = open('json_file')
    dic2 = json.load(f)  #load方法接收一个文件句柄,直接将文件中的json字符串转换成数据结构返回
    f.close()
    print(type(dic2),dic2)
    
    dump load
     1 import json
     2 
     3 ATM
     4 
     5 d = json.load(open('a','r',encoding='utf-8'))
     6 print(d)
     7 
     8 d['money'] += 500
     9 
    10 print(d)
    11 
    12 d['money'] -= 100
    13 
    14 import json
    15 d = json.load(open('a','r',encoding='utf-8'))
    16 print(d)

    json总结

    json.loda()                                参数:文件句柄(r) 作用:将文件中字符串转换为字典

    json.dump()                                   对象(字典)  参数:文件句柄(w)  将字典转换成字符串写入到文件

    json.dumps()                                 对象(字典)    将字典转为字符串

    json.loads()                                   字符串(字典)  将字符串转换成字典  

    真正的json模块

    import json

    data = {'username':['李华','二愣子'],'sex':'male','age':16}

    json_dic2 = json.dumps(data,sort_keys=True,indent=2,separators=(',',':'),ensure_ascii=False)           (字典名,字典键值对排序,缩进,分隔符(和默认一样),元素内有中文就要有这个)

    print(json_dic2)

    pickle

    只支持python  功能和json类似

    import pickle

    print(pickle.dumps({'1':4}))                                将对象转换成类似二进制的东西

    print(pickle.loads(b'x80x03}qx00Xx01x00x00x001qx01Kx04s.'))            将一堆类似二进制的东西转换为字典

    pickle.dump({'2':4},open('b','wb'))

    d = pickle.load(open('b','rb'))

    print(d)

    import pickle
    dic = {'k1':'v1','k2':'v2','k3':'v3'}
    str_dic = pickle.dumps(dic)
    print(str_dic)  #一串二进制内容
    
    dic2 = pickle.loads(str_dic)
    print(dic2)    #字典
    
    import time
    struct_time  = time.localtime(1000000000)
    print(struct_time)
    f = open('pickle_file','wb')
    pickle.dump(struct_time,f)
    f.close()
    
    f = open('pickle_file','rb')
    struct_time2 = pickle.load(f)
    print(struct_time2.tm_year)
    
    pickle

    总结

    josn,pickle 对比
    loads json里的将字符串转换成字典 pickle 将字节转换成字典
    dumps json里的将字典转换成字符串 pickle 将字典转换成字节
    load json里的将文件中的字符串转换成字典 pickle 将文件中的字节转换成字典
    dump json里的将字典转换字符串写入到文件中 pickle 将字典转换成字节写入到文件中


    shelve
    shelve也是python提供给我们的序列化工具,比pickle用起来更简单一些。
    shelve只提供给我们一个open方法,是用key来访问的,使用起来和字典类似。
    import shelve
    f = shelve.open('shelve_file')
    f['key'] = {'int':10, 'float':9.5, 'string':'Sample data'}  #直接对文件句柄操作,就可以存入数据
    f.close()
    
    import shelve
    f1 = shelve.open('shelve_file')
    existing = f1['key']  #取出数据的时候也只需要直接用key获取即可,但是如果key不存在会报错
    f1.close()
    print(existing)
    
    

    这个模块有个限制,它不支持多个应用同一时间往同一个DB进行写操作。所以当我们知道我们的应用如果只进行读操作,我们可以让shelve通过只读方式打开DB

    import shelve
    f = shelve.open('shelve_file', flag='r')
    existing = f['key']
    f.close()
    print(existing)

    由于shelve在默认情况下是不会记录待持久化对象的任何修改的,所以我们在shelve.open()时候需要修改默认参数,否则对象的修改不会保存。

    import shelve
    f1 = shelve.open('shelve_file')
    print(f1['key'])
    f1['key']['new_value'] = 'this was not here before'
    f1.close()
    
    f2 = shelve.open('shelve_file', writeback=True)
    print(f2['key'])
    f2['key']['new_value'] = 'this was not here before'
    f2.close()
    
    设置writeback

    writeback方式有优点也有缺点。优点是减少了我们出错的概率,并且让对象的持久化对用户更加的透明了;但这种方式并不是所有的情况下都需要,首先,使用writeback以后,shelf在open()的时候会增加额外的内存消耗,并且当DB在close()的时候会将缓存中的每一个对象都写入到DB,这也会带来额外的等待时间。因为shelve没有办法知道缓存中哪些对象修改了,哪些对象没有修改,因此所有的对象都会被写入


    random
    随机数
    import random
    import random  # 内置的
    print(random.random())
    0-1 之间随机小数

    print(random.randint(1,10))
    起始位置,终止位置 两头都包含

    print(random.randrange(1,21,2))
    起始位置,终止位置(不包含),步长

    print(random.choice(['alex','wusir','eva_j']))
    从有序数据结构中随机选择一个

    print(random.choices(['wusir','tialaing','taihei','ritian'],k=2))
    随机选择两个,但是有重复

    print(random.sample(['wusir','tialaing','taihei','ritian'],k=2))
    随机选择两个,没有重复

    li = [1,2,3,4,6]
    random.shuffle(li) # 洗牌 打乱顺序
    print(li)

    随机数 验证码 微信红包

    U = chr(random.randrange(65,91))
    L = chr(random.randrange(97,123))
    n1 = random.randrange(0,10)
    n2 = random.randrange(0,10)
    print(U, L,n1,n2)

    os模块

    当前执行这个python文件的工作目录相关的工作路径
    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.system("bash command") 运行shell命令,直接显示

    os.popen("bash command).read() 运行shell命令,获取执行结果

    os.environ 获取系统环境变量

    
    

    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.join('C:\','app','a','b')   --->  C:appa
    os.path.getatime(path) 返回path所指向的文件或者目录的最后访问时间
    os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间
    os.path.getsize(path) 返回path的大小

     
    
    
    sys模块
    python解释器交互的 内置的

    import sys

    print(sys.argv[-1]) ***
    接受cmd方式调用 后边的参数会传递进来
    linux系统上 -- 后端开发 -- 数据库(文件) ip + 端口

    print(sys.path) # 添加自定义模块路径的 # ******

    print(sys.version) # 版本 获取解释的版本号

    sys.platform = 'win1988'

    print(sys.platform) #获取当前操作系统的平台位数 # 不是定死的

    print(sys.exit(1))

    hashlib 

    加密算法

    作用: 当做密码
    判断一致性
    加密后不可逆 不能解 (一年前暴力破解 -- 撞库)
    (现在md5 可以通过反推破译出来)

    sha1,sha256,sha512

    alex3714
    **********

    import hashlib
    md5 = hashlib.md5('盐'.encode('utf-8')) # 选择加密方式 加盐
    md5.update('alex3714'.encode('utf-8')) # 将明文转成字节然后进行加密
    print(md5.hexdigest()) # 生成密文

    md5 = hashlib.md5() # 选择加密方式 加盐
    md5.update('alex3714'.encode('utf-8')) # 将明文转成字节然后进行加密
    print(md5.hexdigest()) # 生成密文

    sha512 = hashlib.sha512()
    sha512.update('alex3714'.encode('utf-8'))
    print(sha512.hexdigest())


    sha512
    优点: 安全    缺点:速度慢

    md5
    优点:安全,快 缺点:易被破解


    user,pwd = input('user|pwd:').strip().split('|')
    import hashlib

    md5 = hashlib.md5(str(user).encode('utf-8'))
    md5.update(pwd.encode('utf-8'))
    print(md5.hexdigest())

    md5,sha1,sha256,sha512

    重要内容
    1.序列化
    json # 必会

    dump 把字典转成字符串存入文件
    load 将文件的字符串转成字典
    dumps 将字典转成字符串
    loads 将字符串转成字典

    pickle # 了解
    shevle # 了解

    2. 随机数
    random.random() 0-1 之间的小数
    验证码
    random.randint(1,10)

    3. os 操作系统

    路径部分
    os.path.join
    os.path.abspath
    os.path.basename
    os.path.dirname
    os.path.getsize() # 获取大小
    os.remove()
    os.rename()
    os.listdir()
    os.chdir() # 切换目录
    os.makedirs('app/a/b') 递归创建文件夹
    os.removedirs('app/a/b') 递归删除
    os.mkdir() 创建单个文件夹
    os.rmdir() 删除单个文件夹

    4. sys python解释器

    sys.argv() 在cmd中执行 可以将文件 后的内容传递到文件中使用
    sys.path python解释器加载的路径,自定义模块添加到这里
    sys.exit()
    sys.version() 获取解释器的版本号
    sys.platform 获取当前平台的位数


    5. hashlib 加密算法
    md5,sha1,sha256,sha512
    1.先导入模块
    2.创建一个加密方式
    3.将要加密的内容编码成字节后加密
    4.生成密文

    import hashlib
    md5 = hashlib.md5(b'alex')
    md5.update('alex3714'.encode('utf-8'))
    print(md5.hexdigest())
  • 相关阅读:
    跨域现象及原理分析
    git的commit撤销
    什么是幂等,什么情况下需要幂等,如何实现幂等
    flowable表简要说明
    关于SpringCloud、SpringBoot简单讲解
    常用的maven仓库地址
    Python安装第三方库常用方法
    反编译pyinstaller打包的exe安装包
    测试用例-需要添加@Transactional 这样 就不会再数据库里面留下痕迹了
    断点 太多了 调试运行特别慢-把所有的历史断点都去掉就快了
  • 原文地址:https://www.cnblogs.com/biulo/p/10561029.html
Copyright © 2011-2022 走看看