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实现读取txt文件并画三维图简单代码示例
Dec 09 Python
PyQt5每天必学之创建窗口居中效果
Apr 19 Python
python之验证码生成(gvcode与captcha)
Jan 02 Python
Python中extend和append的区别讲解
Jan 24 Python
Django框架自定义session处理操作示例
May 27 Python
如何安装2019Pycharm最新版本(详细教程)
Sep 26 Python
django 框架实现的用户注册、登录、退出功能示例
Nov 28 Python
翻转数列python实现,求前n项和,并能输出整个数列的案例
May 03 Python
Python xlwt模块使用代码实例
Jun 10 Python
python3 中时间戳、时间、日期的转换和加减操作
Jul 14 Python
Python Selenium操作Cookie的实例方法
Feb 28 Python
python开发的自动化运维工具ansible详解
Aug 07 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操作Access类(PHP+ODBC+Access)
2007/01/02 PHP
探讨:如何编写PHP扩展
2013/06/13 PHP
解析:通过php socket并借助telnet实现简单的聊天程序
2013/06/18 PHP
PHP中strlen()和mb_strlen()的区别浅析
2014/06/19 PHP
php中time()与$_SERVER[REQUEST_TIME]用法区别
2014/11/19 PHP
Yii2.0框架模型多表关联查询示例
2019/07/18 PHP
用js实现的自定义的对话框的实现代码
2010/03/21 Javascript
jquery1.4.2 for Visual studio 2010 模板文件
2010/07/14 Javascript
一个基于jquery的文本框记数器
2012/09/19 Javascript
Vue中的v-cloak使用解读
2017/03/27 Javascript
强大的JavaScript响应式图表Chartist.js的使用
2017/09/13 Javascript
vue 实现复制内容到粘贴板clipboard的方法
2018/03/17 Javascript
JavaScript实现简单音乐播放器
2020/04/17 Javascript
JavaScript在web自动化测试中的作用示例详解
2019/08/25 Javascript
Vue-cli 移动端布局和动画使用详解
2020/08/10 Javascript
vue中使用router全局守卫实现页面拦截的示例
2020/10/23 Javascript
vue使用keep-alive实现组件切换时保存原组件数据方法
2020/10/30 Javascript
Python可跨平台实现获取按键的方法
2015/03/05 Python
浅谈python字典多键值及重复键值的使用
2016/11/04 Python
Python中Django发送带图片和附件的邮件
2017/03/31 Python
Python 列表(List) 的三种遍历方法实例 详解
2017/04/15 Python
Python基于回溯法子集树模板解决m着色问题示例
2017/09/07 Python
Window版下在Jupyter中编写TensorFlow的环境搭建
2020/04/10 Python
python中round函数如何使用
2020/06/19 Python
HTML5 层的叠加的实现
2020/07/07 HTML / CSS
美国知名男士服饰品牌:Brooks Brothers(布克兄弟)
2016/08/25 全球购物
英国Zoro工具:手动工具,电动工具和个人防护用品
2016/11/02 全球购物
社区中秋节活动方案
2014/01/29 职场文书
食品安全处置方案
2014/06/14 职场文书
义和团口号
2014/06/17 职场文书
房屋租赁协议书
2014/10/18 职场文书
2014年生产部工作总结
2014/12/17 职场文书
工伤认定行政答辩状
2015/05/22 职场文书
2015少先队大队辅导员工作总结
2015/07/24 职场文书
《法国号》教学反思
2016/02/22 职场文书
Win11开始菜单添加休眠选项
2022/04/19 数码科技