序列化 random模块应用

序列化

我们今天学习下序列化,什么是序列化呢? 将原本的字典、列表等内容转换成一个字符串的过程就叫做序列化。

为什么要有序列化模块: 比如,我们在python代码中计算的一个数据需要给另外一段程序使用,那我们怎么给? 现在我们能想到的方法就是存在文件里,然后另一个python程序再从文件里读出来。 但是我们都知道,对于文件来说是没有字典这个概念的,所以我们只能将数据转换成字典放到文件中。 你一定会问,将字典转换成一个字符串很简单,就是str(dic)就可以办到了,为什么我们还要学习序列化模块呢?没错序列化的过程就是从dic 变成str(dic)的过程。现在你可以通过str(dic),将一个名为dic的字典转换成一个字符串, 但是你要怎么把一个字符串转换成字典呢? 聪明的你肯定想到了eval(),如果我们将一个字符串类型的字典str_dic传给eval,就会得到一个返回的字典类型了。 eval()函数十分强大,但是eval是做什么的?e官方demo解释为:将字符串str当成有效的表达式来求值并返回计算结果。 BUT!强大的函数有代价。安全性是其最大的缺点。 想象一下,如果我们从文件中读出的不是一个数据结构,而是一句"删除文件"类似的破坏性语句,那么后果实在不堪设设想。 而使用eval就要担这个风险。 所以,我们并不推荐用eval方法来进行反序列化操作(将str转换成python中的数据结构)

序列化的目的

1、以某种存储形式使自定义对象持久化;2、将对象从一个地方传递到另一个地方。3、使程序更具维护性。

json

Json模块提供了四个功能:dumps、dump、loads、load

dumps 及 loads


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

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‘}]

dump 及 load


1

2

3

4

5

6

7

8

9

10

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) 

其他参数说明

 参数说明

json格式化输出


1

2

3

4

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模块

用于序列化的两个模块

json,用于字符串 和 python数据类型间进行转换 pickle,用于python特有的类型 和 python的数据类型间进行转换 pickle模块提供了四个功能:dumps、dump(序列化,存)、loads(反序列化,读)、load (不仅可以序列化字典,列表...可以把python中任意的数据类型序列化)pickle是python特有的模块.


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

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如此强大,为什么还要学json呢? 这里我们要说明一下,json是一种所有的语言都可以识别的数据结构。 如果我们将一个字典或者序列化成了一个json存在文件里,那么java代码或者js代码也可以拿来用。 但是如果我们用pickle进行序列化,其他语言就不能读懂这是什么了~ 所以,如果你序列化的内容是列表或者字典,我们非常推荐你使用json模块 但如果出于某种原因你不得不序列化其他的数据类型,而未来你还会用python对这个数据进行反序列化的话,那么就可以使用pickle

总结:


1

2

3

4

5

6

7

8

9

10

11

12

13

json模块里的dumps是将python的数据结构转换成字符串,loads是将字符串类型转换成python的数据结构

?

    json模块里的dump是将python的数据结构转换成字符串,然后存入到文件当中

?

    json模块里的load是将文件中字符串类型转换成python的数据结构

?

    pickle模块里的dumps是将python的数据结构转换成二进制的文件,loads是将二进制的文件转换成python的

?

        数据结构

?

    pickle模块里的dump是将python的数据结构转换成二进制然后存入到文件中

?

    pickle模块里的load是将文件中的二进制文件转成python的数据结构

random 模块

random是一个随机数模块,我们一般用来生成一些没有规则的内容

获取0-1之间的随机小数


1

2

import random

print(random.random())

我们可以获取0到1之间的随机的小数,但是还能够满足你,你想要生成指定的数字内的随机小数怎么办??


1

2

import random

print(random.uniform(1,5))

这样写完后,你就有又想法了,说小数你实现了.整数怎么做到随机呢?老铁别急


1

2

import random

print(random.randint(1,5))

你这样是实现了,我想让你给生成随机的奇数和偶数,怎么样不会了吧??


1

2

3

import random

print(random.randrange(1,5,2))   #随机生成1-5的奇数

print(random.randrange(0,5,2))   #随机生成0-5的偶数

我还真发现了,真有点难不住你了,我现在有一个列表 lst = [‘张开‘,‘宝元‘,‘佩奇‘,‘太白‘],你给我随机抽一个人出来


1

2

3

import random

lst = [‘张开‘,‘宝元‘,‘佩奇‘,‘太白‘]

print(random.choice(lst))

看来还是有两把刷子的,我在考考你.怎么给我随机抽出两个来  


1

2

3

import random

lst = [‘张开‘,‘宝元‘,‘佩奇‘,‘太白‘]

print(random.choices(lst,k=2))

差点就被你骗你了,要不是我眼疾手快,发现了你随机出来的两个内容是有重复的,我还就要夸你了,没有满足需求重新实现


1

2

3

import random

lst = [‘张开‘,‘宝元‘,‘佩奇‘,‘太白‘]

print(random.sample(lst,k=2))

可以啊,真是少年有为啊,难不住了,看来事要逼着我使用绝招了.我给你一个列表你给我让他变成随机排序的


1

2

3

4

import random

lst = [1,2,3,4,5,6]

random.shuffle(lst)

print(lst)

原文地址:https://www.cnblogs.com/ellisonzhang/p/10277231.html

时间: 2024-10-10 12:44:03

序列化 random模块应用的相关文章

logging模块,序列化,random模块,json和pickle

1.logging logging模块用来记录软件的各种状态.,开发人员可以通过日志的内容对程序进行修改. import logging logging.debug('debug message') logging.info('info message') logging.warning('warning message') logging.error('error message') logging.critical('critical message') 默认情况下logging打印到标准输

python之random模块

random模块 用于生成随机浮点数.整数.字符串和随机抽取元素 方法: random()  生成一个随机浮点数,范围在0.0~1.0之间 uniform(上限,下限)  在设置的范围内,随机生成一个浮点数(上下限可以是整数,浮点数) randint(上限,下限)  在设定的范围内,随机生成一个整数(上下限必须为整数) choice(序列)  从任何序列中选取一个随机的元素返回 shuffle(序列)  随机打乱一个序列中元素的顺序 sample(序列,长度)  从指定的序列中随机截取指定长度的

time&amp;datetime&amp;random模块

import time 1.print(time.clock()) #返回处理器时间,3.3开始已废弃 , 改成了time.process_time()测量处理器运算时间,不包括sleep时间,不稳定,mac上测不出来 2.print(time.altzone) #返回与utc时间的时间差,以秒计算3.print(time.asctime()) #返回时间格式"Thu Apr 13 21:46:21 2017", 4.print(time.localtime()) #返回本地时间 的s

random 模块

random 模块包含许多随机数生成器,用于生成随机数 使用 random 模块获得随机数字 1. random.random()用于生成一个0到1的随机符点数: 0 <= n < 1.0 import random print random.random() # 0.403805661236 2. random.uniform(a,b)用于生成一个指定范围内的随机符点数,两个参数其中一个是上限,一个是下限.如果a > b,则生成的随机数n: a >= n >= b.如果 a

Python中的random模块,来自于Capricorn的实验室

Python中的random模块用于生成随机数.下面介绍一下random模块中最常用的几个函数. random.random random.random()用于生成一个0到1的随机符点数: 0 <= n < 1.0 random.uniform random.uniform的函数原型为:random.uniform(a, b),用于生成一个指定范围内的随机符点数,两个参数其中一个是上限,一个是下限.如果a > b,则生成的随机数n: a <= n <= b.如果 a <

python random 模块

random模块是Python中常用来生成随机数或随机字符串的一个模块.比如你想测试一个登陆接口,需要批量生一些用户名,应户名包括大写字母.小写字母和数字,每个用户名不能重复,这件事就可以交给Python random来实现. 先说一下random的基本用法: import random,string print(random.random()) #用于生成0-1之间的随机浮点数 print(random.uniform(1,3)) #用于生成一个1-3之间(指定范围内)的随机浮点数 print

Python random模块的简单介绍

Python中的random模块是用于生成随机数,我们也可以用他随机生成数字和字符串 random.randint(a,b)  :a到b里的一个随机整数 random.random():用于生成0到1的浮点数,如下图,0.0<x<1.0 random.uniform(a, b):用于生成指定范围的浮点数 ,不管是a大于b还是b大于a,生成的浮点数大小都在ab之间 random.randrange([start], stop [,step]) 从指定范围内,按指定基数递增的集合中获取一个随机数,

python之-- random模块

random模块random.random():随机打印一个小数random.randint(1,10):随机打印1-10之间的任意数字(包括1和10)random.randrange(1,10):随机打印1-10之间的任意数字(不包括10)random.sample(range(100),5):从100个数字中随机抽取5个数字以列表形式打印.可以用作随机验证码或密码使用 如:random.sample('abcde',3) 随机生成3个字符. 举例:生成随机验证码 第一种写法 1 import

python小白-day5 random模块

random模块 一.生成随机数 1 2 3 4 import random print(random.random()) print(random.randint(1,2)) print(random.randrange(1,10)) 二.生成随机验证码 1 2 3 4 5 6 7 8 9 10 import random cc = '' for i in range(6):     current = random.randint(0,4)     if current != i: