zoukankan      html  css  js  c++  java
  • python基础之模块(json,pickle,hashlib,collections)

    json模块

    json模块是将满足条件的数据结构转化成特殊的字符串,并且也可以反序列化还原回去。

    • 用于网络传输:dumps、loads

    • 用于文件写读:dump、load

    • dumps 将字典和列表转化为字符串类型
      import json
      dic={"k1":"v1","k2":"v2","k3":"v3"}
      str_dic = json.dumps(dic)
      print(type(str_dic),str_dic)   #class "str"
      
    • loads 将字符串类型的字典或列表转换成原数据类型字典或列表

      import json
      dic={"k1":"v1","k2":"v2","k3":"v3"}
      dic2 = json.loads(str_dic)
      print(type(dic2),dic2)  #class dict
      
    • dump 将对象转换成字符串写入文件中 默认一个json文件只能存储一个json数据

      import json
      f = open("a.txt","w")
      dic = {"k1“:”v1",k2":"v2"}
      json.dump(dic,f)    #dump 方法接受一个文件句柄,直接将字典转换成json字符串写入文件
      不用f,write之类的,此时已经将dic写到a.txt中了
      
    • load 将字符串类型的字典或列表转换成原数据类型字典或列表

    import json
    f = open("a.txt")
    dic2 = json.load(f)  #load方法接受一个文件句柄,直接将文件中的json字符串转换成原数据结构返回
    f.close()
    print(type(dic2),dic2)
    #<class 'dict'>    {'k1': 'v1', 'k2': 'v2'}
    

    pickle模块

    pickle模块是将Python所有的数据结构以及对象等转化成bytes类型,然后还可以反序列化还原回去。

    • 用于网络传输 dumps loads

    • 用于文件写读 dump load

    • dumps

      import pickle 
      dic={'k1':'v1','k2':'v2','k3':'v3'}
      str_dic = pickle.dumps(dic)
      print(str_dic)  bytes类型
      
    • loads

      dic2=pickle.loads(str_dic)
      print(dic2)  #字典内容
      
    • dump/load

      变成字节写入文件

      dic = {(1,2):'oldboy',1:True,'set':{1,2,3}}
      f = open('pick序列化',mode='wb')
      pickle.dump(dic,f) 打开文件,以字节形式写入dic
      f.close()
      
      f=open('pick序列化',mode='rb')
      print(pickle.load(f)) 读取字节,将文件中字节形式的字典返回
      

    hashlib模块 加密算法

    • md5 sha1 sha256 sha512

      md5    1.内容相同,密码一定相同
      	   2 加密的密文不可逆  
      	   3 明文 字节 密文
      
    • 简单的加密

      import hashlib
      s ="1234567"
      m1 = hashlib.md5()   #选择加密方式,初始化一个加密
      m1.update(s.encode("utf-8"))  #将要加密的内容,添加到m中
      print(m1.hexdigest())   进行加密  fcea920f7412b5da7be0cf42b8c93759
      
    • 固定加盐

      user = input("user:") sadasd
      pwd = input ("pwd")  sadasd
      import hashlib
      md5 =hashlib.md5("oldboy".encode("utf-8"))  #盐
      md5.update(pwd.encode("utf-8"))
      print(md5.hexdigest())
      
    • 动态加盐:

      import hashlib
      user = input("user:") #zz洲神
      pwd = input ("pwd") #洲神在此
      md5 = hashlib.md5(user.encode("utf-8"))  盐
      md5.update(pwd.encode("utf-8"))
      print(m‘d5.hexdigest())
      
      结果:user:zz洲神
      	pwd洲神在此
      	07bce8baf64e6bc38646b8d48655b5fe
      

    collections模块

    • 统计 Counter

      lst = [11,2,2,123,1,1,123,12,12,32,12,31,23,123,21,3]

      from collections import Counter       # ***
      print(dict(Counter(lst)))   统计
      结果 {11: 1, 2: 2, 123: 3, 1: 2, 12: 3, 32: 1, 31: 1, 23: 1, 21: 1, 3: 1}
      
    • 有序字典 orderedDict

      from collections import OrderedDict    # ***
      a = OrderedDict({"key1":1,"key2":2})
      print(a)
      print(a["key1"])
      输出结果
      OrderedDict([('key1', 1), ('key2', 2)])   模块的特殊数据类型,记就行了
      1
      
    • 默认字典 defaultdict

      from collections import defaultdict
      dic = defaultdict(list)
      dic["key1"].append(10)  默认dic中的值是字典,也可以修改 都可以,看示例
      dic["key2"].append(20)
      dic["ke3"]="xxxx"
      print(dic)
      结果:defaultdict(<class 'list'>, {'key1': [10], 'key2': [20], 'ke3': 'xxxx'})
      
    • 双端队列

      使用list存储数据时,按索引访问元素很快,但是插入和删除元素就很慢了,因为list是线性存储,数据量大的时候,插入和删除效率很低。

      deque是为了高效实现插入和删除操作的双向列表,适合用于队列和栈:

      from collections import deque
      q = deque(['a', 'b', 'c'])
      q.append('x')
      q.appendleft('y')
      print(q)
      deque(['y', 'a', 'b', 'c', 'x'])
      

      deque除了实现list的append()和pop()外,还支持appendleft()和popleft(),这样就可以非常高效地往头部添加或删除元素。主要是实现了效率!

    • isinstance

      判断当前数据类型,返回的是一个布尔值

      确切的是判断前面的lst,是否是后面的Iterator的对象

      from collections import Iterable,Iterator
      lst = [1,2,3,4]
      print(isinstance(lst,list))   # 判断lst是不是列表类型 返回的是True
      print(isinstance(lst,Iterator)) # 判断lst是不是迭代器 返回的是False
      print(isinstance(lst,Iterable)) # 判断lst是不是可迭代对象 返回的是True
      
  • 相关阅读:
    rabbitmq在ios中实战采坑
    网络七层架构一句话简述
    HystrixCommand实战
    前端SEO技巧
    前端面试-难点问题2-java和javascript的区别
    前端面试题--难点问题
    [微信营销企划之路]003.Access forbidden!
    [Python进阶]001.不定参数
    [安卓基础]011存储数据(中)——sqlite语法介绍
    [JavaWeb基础] 015.Struts2 表单验证框架
  • 原文地址:https://www.cnblogs.com/zzsy/p/12229838.html
Copyright © 2011-2022 走看看