序列化 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中的数据结构)
aaarticlea/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==" alt="" />
序列化的目的
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) |
序列化 random模块应用的更多相关文章
- day13 函数模块之序列化 random 模块 os模块 sys模块 hashlib模块 collections模块
json import json dic = {'k1':'v1','k2':'v2','k3':'v3'} str_dic = json.dumps(dic) #序列化:将一个字典转换成一个字符串 ...
- python常用模块: random模块, time模块, sys模块, os模块, 序列化模块
一. random模块 import random # 任意小数 print(random.random()) # 0到1的任意小数 print(random.uniform(-10, 10)) # ...
- 模块—— 序列化模块、random模块、os模块 、 sys模块、hashlib模块、collections模块
今天我们来说说Python中的模块: 第三方模块 可以下载/安装/使用 第一步:将pip.exe 所在的目录添加到环境变量中第二步:输入pip第三步:pip install 要安装的模块名称 #pi ...
- python time模块 sys模块 collections模块 random模块 os模块 序列化 datetime模块
一 collections模块 collections模块在内置的数据类型,比如:int.str.list.dict等基础之上额外提供了几种数据类型. 参考博客 http://www.pythoner ...
- 常用模块(collections模块,时间模块,random模块,os模块,sys模块,序列化模块,re模块,hashlib模块,configparser模块,logging模块)
认识模块 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编写的 ...
- (转)python常用模块(模块和包的解释,time模块,sys模块,random模块,os模块,json和pickle序列化模块)
阅读目录 1.1.1导入模块 1.1.2__name__ 1.1模块 什么是模块: 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代 ...
- collections模块、时间模块、random模块、os模块、sys模块、序列化模块、subprocess模块
一.collections模块 1.其他数据类型 在内置数据类型(str.dict.list.tuple.set)的基础上,collections模块还提供了了几个额外的数据类型:Counter.de ...
- random模块、os模块、序列化模块、sy模块s、subprocess模块
random随机数模块 random.random( ) 随机产生一个0-1之间的小数 print(random.random()) # 0.31595547439342897 random.rand ...
- python-Day5-深入正则表达式--冒泡排序-时间复杂度 --常用模块学习:自定义模块--random模块:随机验证码--time & datetime模块
正则表达式 语法: mport re #导入模块名 p = re.compile("^[0-9]") #生成要匹配的正则对象 , ^代表从开头匹配,[0 ...
随机推荐
- C/S 和 B/S 架构
浏览器/服务器结构.它是C/S架构的一种改进,可以说属于三层C/S架构. 比较大的差别1.结构 C/S是两层架构,由客户端和服务器组成,而B/S是三层架构,由浏览器,WEB服务器和数据库服务器组成. ...
- JavaScript特点、优缺点及常用框架
参考来源: http://www.cnblogs.com/SanMaoSpace/archive/2013/06/14/3136774.html
- python学习day13
目录 JavaScript Dom jQuery JavaScript JavaScript 是世界上最流行的编程语言. 这门语言可用于 HTML 和 web,更可广泛用于服务器.PC.笔记本电脑.平 ...
- js去掉字符串前后以及中间的空格
p['bank_card'] = p['bank_card'].replace(/(^\s+)|(\s+$)/g,"");p['bank_card'] = p['bank_card ...
- 如何在spring环境中做单元测试
在测试类的上方加入以下注解 @RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration("classpath:spring.xm ...
- arcgis mdb 数据中的shp 如何合并一起
如上操作 一直往下就可以啦 选择数据源 就可以了,然后就可以load 其他数据啦 ,坐标系要一直
- window server 2012R2服务器部署遇到的问题
1. 出现问题原因:服务器的Framework4.5 未安装, 解决办法:从网上下载之后,安装,然后重启服务器即可 2. 出现问题原因:内存不足或者虚拟内存不足 解决办法:设置虚拟内存来解决,步骤如下 ...
- 安装Pywin32后无法正常引用pyd文件
1. 首先在官方下载pywin32 2.下载完成后,无法正常引用pyd文件 3.解决方案: python安装目录\Lib\site-packages\pywin32_system32\* 至 C:\W ...
- Selenium私房菜系列10 -- 我遇到的问题及解决问题的方法
Selenium私房菜系列10 -- 我遇到的问题及解决问题的方法
- kettle数据同步方法
1.实时性要求不高,采用全删全插的方式(适合于维度表.大数据量表) 2.有时间维度,直接从事实表同步的数据,可以采用根据时间字段进行筛选,增量同步.这个网上有很多例子,就不重复写了. 3.没有时间维度 ...