python之模块-序列化 random模块

什么是模块?

import json
import pickle
# 模块:py文件
# 1,内置模块 time os random shelve re 等等
# 2,拓展模块。 大神写的。beautifulsoup iteat
# 3, 自定义模块。

# 序列化模块。
# 将重要的数据 变成可以传输,并且得到后能够反解出来。

    # json : 适用于所有语言。
    # dict list, tuple str int, float True False None
#     +-------------------+---------------+
#     | Python | JSON |
#     += == == == == == == == == == += == == == == == == == +
#     | dict | object |
#     +-------------------+---------------+
#     | list, tuple | array |
#     +-------------------+---------------+
#     | str | string |
#     +-------------------+---------------+
#     | int, float | number |
#     +-------------------+---------------+
#     | True | true |
#     +-------------------+---------------+
#     | False | false |
#     +-------------------+---------------+
#     | None | null |
#     +-------------------+---------------+
    # pickle 只用于Python语言之间的传输,包含所有的python支持的数据类型。
    
    
    # shelve :
# 序列化:
dic = {'name': '二狗', 'age': 25, 'sex': ''}
ret = str(dic).encode('utf-8')
#
ret1 = ret.decode('utf-8')
print(ret1, type(ret1))
print(type(eval(ret1)))   #不要用,不安全

# json
# dumps loads # 网络传输
dic = {'name': '二狗', 'age': 25, 'sex': ''}
ret = json.dumps(dic,ensure_ascii=False)   # 序列化过程 : 就是变成一个特殊的字符串
respon = json.loads(ret)            # 反序列化:将序列化的特殊字符串反解成原来的类型。
print(ret,type(ret))              #特殊的字符串""  #序列化过程
# print(dic)                   #字典的字符串是''
print(respon, type(respon)) #反序列化过程

# dump load # 写入文件
# dump load # 写入文件
dic = {1:{'username': '二狗1', 'password': 123},
        2:{'username': '二狗2', 'password': 123},
        3:{'username': '二狗3', 'password': 123},
       }
f = open('json_file','w')
json.dump(dic,f)  #dump方法接收一个文件句柄,直接将字典转换成json字符串写入文件
f.close()

f = open('json_file')
dic2 = json.load(f)  #load方法接收一个文件句柄,直接将文件中的json字符串转换成数据结构返回
print(dic2,type(dic2))
f.close()
print(type(dic2),dic2)

 

 

# pickle 只用于Python语言之间的传输,包含所有的python支持的数据类型。
dic = {'name': '二狗', 'age': 25, 'sex': ''}
ret = pickle.dumps(dic)  #
respon = pickle.loads(ret)
print(ret)
print(respon)

#  dump load # 写入文件  (这个不仅可以写常规的数据,还可以将对象写入)

class A:
    name = 'alex'
    def func(self):
        print(666)
obj = A()
f = open('pickle_file','wb')  #写进入
pickle.dump(obj,f)   #用pickle都是乱码
f.close()

f = open('pickle_file','rb')  #打开以读的形式
ret = pickle.load(f)  #
print(ret.name)
ret.func()
f.close()
# 思路:假如你打游戏,每次进去的时候,你的状态都在,就自己用这种方式,能把对象dump到一个文件当中,读取出来还保有之前的信息。

shelve

 

import shelve   #用的很少
f = shelve.open('shelve_file')
f['key'] = {'int':10, 'float':9.5, 'string':'Sample data'}  #直接对文件句柄操作,就可以存入数据
f.close()
# 写完之后出来3个文件。
import shelve
f1 = shelve.open('shelve_file')
existing = f1['key']  #取出数据的时候也只需要直接用key获取即可,但是如果key不存在会报错
f1.close()
print(existing)

 

random模块:
print(random.random())  # 随机在0~1之间的float
print(random.uniform(1,10)) # 1 ~10 浮点型
print(random.randint(1,10)) # 1~10 之间的整数  ***
print(random.randrange(1,10,2)) # 大于等于1且小于10之间的奇数)

print(random.choice([1, '23', [4,5]]))  # 多选择一  ***
print(random.sample([1,'23',[4,5], 'alex'],2)) #  列表元素 任意2个组合)

item = [1, 3, 5, 7, 9]
random.shuffle(item) # 打乱次序  ***
print(item)

 

# 生成随机验证码: 大写 小写 数字 3个混合组合
# 0~9 随机选一个
# a~z 随机选一个
# 两个选一个
import random
# print(chr(97))
# print(chr(122))
def code():
    codes = ''  #初始化一个字符串
    for i in range(5):
        num = str(random.randint(0, 9))   #在0-9中随机选择数字
        char1 = chr(random.randint(97, 122))  #a:97 z:122 a-z中随机选择一个小写字母
        char2 = chr(random.randint(65, 96))   #A:65 Z:96   A-Z中随机选择一个大写字母
        c1 = random.choice([num, char1, char2])  #放到一个列表中
        # print(c1)
        codes += c1  #codes = codes + c1
    return codes #返回codes结果
print(code())  # 打印一下codes结果
随机验证码

 

posted @ 2018-11-20 18:36  小菜鸟111  阅读(221)  评论(0编辑  收藏  举报