python模块之sys模块和序列化模块(实例讲解)


Posted in Python onSeptember 13, 2017

sys模块

sys模块是与python解释器交互的一个接口

sys.argv   命令行参数List,第一个元素是程序本身路径
sys.exit(n)  退出程序,正常退出时exit(0),错误退出sys.exit(1)
sys.version  获取Python解释程序的版本信息
sys.path   返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform  返回操作系统平台名称

序列化模块

序列化的目的:

以某种存储形式使自定义对象持久化

将对象从一个地方传递到另一个地方

使程序更具维护性

python模块之sys模块和序列化模块(实例讲解)

json

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


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'}]
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)
import json
f = open('file','w')
json.dump({'国籍':'中国'},f)
ret = json.dumps({'国籍':'中国'})
f.write(ret+'\n')
json.dump({'国籍':'美国'},f,ensure_ascii=False)
ret = json.dumps({'国籍':'美国'},ensure_ascii=False)
f.write(ret+'\n')
f.close()

ensure_ascii关键字参数

pickle

json & pickle

json,用于字符串 和 python数据类型间进行转换

pickle,用于python特有的类型 和 python的数据类型间进行转换

# pickle模块提供了四个功能:dumps、dump(序列化,存)、loads(反序列化,读)、load (不仅可以序列化字典,列表...可以把python中任意的数据类型序列化


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)

shelve

# shelve也是python提供给我们的序列化工具,比pickle用起来更简单一些。
# shelve只提供给我们一个open方法,是用key来访问的,使用起来和字典类似。



import shelve
f = shelve.open('shelve_file')
f['key'] = {'int':10, 'float':9.5, 'string':'Sample data'} #直接对文件句柄操作,就可以存入数据
f.close()

import shelve
f1 = shelve.open('shelve_file')
existing = f1['key'] #取出数据的时候也只需要直接用key获取即可,但是如果key不存在会报错
f1.close()
print(existing)
# 这个模块有个限制,它不支持多个应用同一时间往同一个DB进行写操作。所以当我们知道我们的应用如果只进行读操作,我们可以让shelve通过只读方式打开DB


import shelve
f = shelve.open('shelve_file', flag='r')
existing = f['key']
f.close()
print(existing)
# 由于shelve在默认情况下是不会记录待持久化对象的任何修改的,所以我们在shelve.open()时候需要修改默认参数,否则对象的修改不会保存。


import shelve
f1 = shelve.open('shelve_file')
print(f1['key'])
f1['key']['new_value'] = 'this was not here before'
f1.close()

f2 = shelve.open('shelve_file', writeback=True)
print(f2['key'])
f2['key']['new_value'] = 'this was not here before'
f2.close()



"""
writeback方式有优点也有缺点。优点是减少了我们出错的概率,并且让对象的持久化对用户更加的透明了;但这种方式并不是所有的情况下都需要,首先,使用writeback以后,shelf在open()的时候会增加额外的内存消耗,并且当DB在close()的时候会将缓存中的每一个对象都写入到DB,这也会带来额外的等待时间。因为shelve没有办法知道缓存中哪些对象修改了,哪些对象没有修改,因此所有的对象都会被写入。
"""

以上这篇python模块之sys模块和序列化模块(实例讲解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
用Python实现一个简单的线程池
Apr 07 Python
讲解Python中for循环下的索引变量的作用域
Apr 15 Python
python编写微信远程控制电脑的程序
Jan 05 Python
对python中词典的values值的修改或新增KEY详解
Jan 20 Python
python tkinter canvas 显示图片的示例
Jun 13 Python
使用Python来做一个屏幕录制工具的操作代码
Jan 18 Python
解决Pytorch自定义层出现多Variable共享内存错误问题
Jun 28 Python
Python txt文件如何转换成字典
Nov 03 Python
python3爬虫GIL修改多线程实例讲解
Nov 24 Python
Linux系统下升级pip的完整步骤
Jan 31 Python
python上下文管理的使用场景实例讲解
Mar 03 Python
Python入门之使用pandas分析excel数据
May 12 Python
python模块之time模块(实例讲解)
Sep 13 #Python
python difflib模块示例讲解
Sep 13 #Python
Python网络编程 Python套接字编程
Sep 13 #Python
python和ruby,我选谁?
Sep 13 #Python
python实现简单点对点(p2p)聊天
Sep 13 #Python
django 常用orm操作详解
Sep 13 #Python
Python三级菜单的实例
Sep 13 #Python
You might like
深入理解PHP之OpCode原理详解
2016/06/01 PHP
三个思路解决laravel上传文件报错:413 Request Entity Too Large问题
2017/11/13 PHP
Laravel 手动开关 Eloquent 修改器的操作方法
2019/12/30 PHP
如何实现iframe(嵌入式帧)的自适应高度
2006/07/26 Javascript
JS Timing
2007/04/21 Javascript
jQuery Mobile页面返回不需要重新get
2016/04/26 Javascript
JS实现iframe编辑器光标位置插入内容的方法(兼容IE和Firefox)
2016/06/24 Javascript
JavaScript条件判断_动力节点Java学院整理
2017/06/26 Javascript
微信小程序开发之自定义tabBar的实现
2018/09/06 Javascript
微信小程序实现获取小程序码和二维码java接口开发
2019/03/29 Javascript
countUp.js实现数字滚动效果
2019/10/18 Javascript
python检测远程端口是否打开的方法
2015/03/14 Python
Python线性方程组求解运算示例
2018/01/17 Python
mac下如何将python2.7改为python3
2018/07/13 Python
python 实现对数据集的归一化的方法(0-1之间)
2018/07/17 Python
Python3爬虫学习入门教程
2018/12/11 Python
Python实现将通信达.day文件读取为DataFrame
2018/12/22 Python
Python如何处理大数据?3个技巧效率提升攻略(推荐)
2019/04/15 Python
Python3.5装饰器典型案例分析
2019/04/30 Python
python实现五子棋游戏
2019/06/18 Python
Django的用户模块与权限系统的示例代码
2019/07/24 Python
python控制台实现tab补全和清屏的例子
2019/08/20 Python
在 Pycharm 安装使用black的方法详解
2020/04/02 Python
python 爬取百度文库并下载(免费文章限定)
2020/12/04 Python
简单掌握CSS3将文字描边及填充文字颜色的方法
2016/03/07 HTML / CSS
加拿大建筑和装修专家:Reno-Depot
2017/12/21 全球购物
英国女鞋购物网站:Moda in Pelle
2019/02/18 全球购物
会计与出纳自荐书范文
2014/03/16 职场文书
企业三严三实学习心得体会
2014/10/13 职场文书
绍兴鲁迅故居导游词
2015/02/09 职场文书
企业承诺书格式范文
2015/04/28 职场文书
初中团委工作总结
2015/08/13 职场文书
学习党章心得体会2016
2016/01/15 职场文书
写作指导:怎么书写竞聘演讲稿?
2019/07/04 职场文书
OpenCV全景图像拼接的实现示例
2021/06/05 Python
Mysql数据库按时间点恢复实战记录
2021/06/30 MySQL