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())
  • 相关阅读:
    nowcoderD Xieldy And His Password
    Codeforces681D Gifts by the List
    nowcoder80D applese的生日
    Codeforces961E Tufurama
    Codeforces957 Mahmoud and Ehab and yet another xor task
    nowcoder82E 无向图中的最短距离
    nowcoder82B 区间的连续段
    Codeforces903E Swapping Characters
    Codeforces614C Peter and Snow Blower
    Codeforces614D Skills
  • 原文地址:https://www.cnblogs.com/biulo/p/10561029.html
Copyright © 2011-2022 走看看