zoukankan      html  css  js  c++  java
  • Python之常用模块(三)random模块和序列化

    random模块

    print(random.random())#在0~1之间随机生成一个浮点数
    print(random.uniform(0,10))#在0~10时间随机生成一个浮点数,可以指定范围
    print(random.randint(1,10))#随机生成一个整数,可以指定范围
    print(random.randrange(1,5,2))#起始终止步长,生成一个数字
    print(random.chioce([1,2,3,4,5,6]))#随机选择一个元素
    print(random.chioces([1,2,3,4,5,6,7]),k=2)#随机选择两个元素,会有重复的
    print(random.sample((1,2,3,4,5,6,7,8)),k=2)#随机选择两个元素,不会有重复的,除非只有两个
    print(random.shuffle(lst))#打乱顺序
    *************************************************
    >>> import random
    #随机小数
    >>> random.random()     # 大于0且小于1之间的小数
    0.7664338663654585
    >>> random.uniform(1,3) #大于1小于3的小数
    1.6270147180533838
    
    #随机整数
    >>> random.randint(1,5)  # 大于等于1且小于等于5之间的整数***
    >>> random.randrange(1,10,2) # 大于等于1且小于10之间的奇数***
    
    #随机选择一个返回
    >>> random.choice([1,'23',[4,5]])  # #1或者23或者[4,5]
    #随机选择多个返回,返回的个数为函数的第二个参数***
    >>> random.choices([1,2,3,4],k=2) # 选择两个元素,会有重复,可控制元素个数***
    >>> random.sample([1,'23',[4,5]],k=2) # #列表元素任意2个组合,不会重复(原列表有重复就会出现重复),可控制元素个数***
    [[4, 5], '23']
    
    #打乱列表顺序
    >>> item=[1,3,5,7,9]
    >>> random.shuffle(item) # 对原列表打乱次序
    >>> item
    [5, 1, 3, 7, 9]
    >>> random.shuffle(item)
    >>> item
    [5, 9, 7, 1, 3]
    

    5.5 序列化

    1. 序列化简介:我们今天学习下序列化,什么是序列化呢? 序列化的本质就是将一种数据结构(如字典、列表)等转换成一个特殊的序列(字符串或者bytes)的过程就叫做序列化。

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

      • 用于网络传输:dumps、loads

      • #dumps
        #将字典类型转换成字符串类型
        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转换完的字符串类型的字典中的字符串是由""表示的
        
        #loads
        #将字符串类型的字典转换成字典类型
        import json
        dic2 = json.loads(str_dic)  #反序列化:将一个字符串格式的字典转换成一个字典
        #注意,要用json的loads功能处理的字符串类型的字典中的字符串必须由""表示
        print(type(dic2),dic2)  #<class 'dict'> {'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}
        
      • 用于文件写读:dump、load

      • #dump
        #将对象转换成字符串写入到文件当中
        import json
        f = open('json_file.json','w')
        dic = {'k1':'v1','k2':'v2','k3':'v3'}
        json.dump(dic,f)  #dump方法接收一个文件句柄,直接将字典转换成json字符串写入文件
        f.close()
        # json文件也是文件,就是专门存储json字符串的文件。
        
        #load
        #将文件中的字符串类型的字典转换成字典
        import json
        f = open('json_file.json')
        dic2 = json.load(f)  #load方法接收一个文件句柄,直接将文件中的json字符串转换成数据结构返回
        f.close()
        print(type(dic2),dic2)
        
      • 其他参数说明

        • #ensure_ascii:,当它为True的时候,所有非ASCII码字符显示为uXXXX序列,只需在dump时将ensure_ascii设置为False即可,此时存入json的中文即可正常显示。
          
          #separators:分隔符,实际上是
          #(item_separator, dict_separator)的一个元组,默认的就是(,,:);这表示dictionary内keys之间用“,”隔开,而KEY和value之间用“:”隔开。
          
          #sort_keys:将数据根据keys的值进行排序。 剩下的自己看源码研究
          
        • json序列化存储多个数据到同一个文件中:对于json序列化,存储多个数据到一个文件中是有问题的,默认一个json文件只能存储一个json数据,但是也可以解决

          • dic1 = {'name':'oldboy1'}
            dic2 = {'name':'oldboy2'}
            dic3 = {'name':'oldboy3'}
            f = open('序列化',encoding='utf-8',mode='a')
            str1 = json.dumps(dic1)
            f.write(str1+'
            ')
            str2 = json.dumps(dic2)
            f.write(str2+'
            ')
            str3 = json.dumps(dic3)
            f.write(str3+'
            ')
            f.close()
            
            f = open('序列化',encoding='utf-8')
            for line in f:
                print(json.loads(line))
            
    3. pickle模块

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

      • 用于网络传输:dumps、loads

        • #dumps
          import pickle
          dic = {'k1':'v1','k2':'v2','k3':'v3'}
          str_dic = pickle.dumps(dic)
          print(str_dic)  # bytes类型
          
          dic2 = pickle.loads(str_dic)
          print(dic2)    #字典
          
          #loads
          import pickle
          def func():
              print(666)
          
          ret = pickle.dumps(func)
          print(ret,type(ret))  # b'x80x03c__main__
          func
          qx00.' <class 'bytes'>
          f1 = pickle.loads(ret)  # f1得到 func函数的内存地址
          f1()  # 执行func函数
          
      • 用于文件写读:dump、load

        • dic = {(1,2):'oldboy',1:True,'set':{1,2,3}}
          f = open('pick序列化',mode='wb')
          pickle.dump(dic,f)
          f.close()
          with open('pick序列化',mode='wb') as f1:
              pickle.dump(dic,f1)
          
      • pickle序列化存储多个数据到一个文件中

        • dic1 = {'name':'oldboy1'}
          dic2 = {'name':'oldboy2'}
          dic3 = {'name':'oldboy3'}
          
          f = open('pick多数据',mode='wb')
          pickle.dump(dic1,f)
          pickle.dump(dic2,f)
          pickle.dump(dic3,f)
          f.close()
          
          f = open('pick多数据',mode='rb')
          while True:
              try:
                  print(pickle.load(f))
              except EOFError:
                  break
          f.close()
          
    4. 总结:序列化模块就是将一个常见的数据结构转化成一个特殊的序列,并且这个特殊的序列还可以反解回去。它的主要用途:文件读写数据,网络传输数据。

  • 相关阅读:
    hive的常用操作
    更改Oracle字符集避免乱码
    SQLLDR导入乱码问题的解决
    linux环境下安装oracle步骤和自启动oracle
    解决Sql Server 日志满了,设置收缩
    解决sql server死锁
    boolean b=true?false:true==true?false:true;
    "无法删除数据库,因为该数据库当前正在使用"问题解决
    C#使用wkhtmltopdf,把HTML生成PDF(包含分页)
    小技巧:方便开机打开多个程序
  • 原文地址:https://www.cnblogs.com/zhangdadayou/p/11415262.html
Copyright © 2011-2022 走看看