码迷,mamicode.com
首页 > 编程语言 > 详细

Python之常用模块(四)os模块和sys模块

时间:2019-08-26 23:20:09      阅读:267      评论:0      收藏:0      [点我收藏+]

标签:数字   网络传输   序列   odi   fun   dict   文件   int   序列化   

5.4 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+'\n')
          str2 = json.dumps(dic2)
          f.write(str2+'\n')
          str3 = json.dumps(dic3)
          f.write(str3+'\n')
          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'\x80\x03c__main__\nfunc\nq\x00.' <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. 总结:序列化模块就是将一个常见的数据结构转化成一个特殊的序列,并且这个特殊的序列还可以反解回去。它的主要用途:文件读写数据,网络传输数据。

Python之常用模块(四)os模块和sys模块

标签:数字   网络传输   序列   odi   fun   dict   文件   int   序列化   

原文地址:https://www.cnblogs.com/zhangdadayou/p/11415275.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!