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发腾讯微博代码分享
Jan 10 Python
python里将list中元素依次向前移动一位
Sep 12 Python
PyCharm 常用快捷键和设置方法
Dec 20 Python
Django开发中复选框用法示例
Mar 20 Python
python实现超简单的视频对象提取功能
Jun 04 Python
10 行 Python 代码教你自动发送短信(不想回复工作邮件妙招)
Oct 11 Python
Python2 Selenium元素定位的实现(8种)
Feb 25 Python
python实现QQ批量登录功能
Jun 19 Python
使用APScheduler3.0.1 实现定时任务的方法
Jul 22 Python
python要安装在哪个盘
Jun 15 Python
python 实时调取摄像头的示例代码
Nov 25 Python
Python实现曲线拟合的最小二乘法
Feb 19 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
PHP4实际应用经验篇(1)
2006/10/09 PHP
php 无限级 SelectTree 类
2009/05/19 PHP
php学习笔记 php中面向对象三大特性之一[封装性]的应用
2011/06/13 PHP
PHP 二维数组根据某个字段排序的具体实现
2014/06/03 PHP
PHP实现的一致性哈希算法完整实例
2015/11/14 PHP
php投票系统之增加与删除投票(管理员篇)
2016/07/01 PHP
php制作圆形用户头像的实例_自定义封装类源代码
2017/09/18 PHP
通过修改referer下载文件的方法
2008/05/11 Javascript
js刷新框架子页面的七种方法代码
2008/11/20 Javascript
如何让easyui gridview 宽度自适应窗口改变及fitColumns应用
2013/01/25 Javascript
JavaScript实现找出数组中最长的连续数字序列
2014/09/03 Javascript
自定义函数实现IE7与IE8不兼容js中trim函数的问题
2015/02/03 Javascript
JS访问SWF的函数用法实例
2015/07/01 Javascript
JavaScript数组方法总结分析
2016/05/06 Javascript
javascript cookie用法基础教程(概念,设置,读取及删除)
2016/09/20 Javascript
Node.js使用Koa搭建 基础项目
2018/01/08 Javascript
Vuex入门到上手教程
2018/06/20 Javascript
解决Js先触发失去焦点事件再执行点击事件的问题
2018/08/30 Javascript
详解VUE前端按钮权限控制
2019/04/26 Javascript
vue设置动态请求地址的例子
2019/11/01 Javascript
python 获取字符串MD5值方法
2018/05/29 Python
python 读取竖线分隔符的文本方法
2018/12/20 Python
Python Matplotlib库安装与基本作图示例
2019/01/09 Python
使用django的objects.filter()方法匹配多个关键字的方法
2019/07/18 Python
python requests抓取one推送文字和图片代码实例
2019/11/04 Python
Python for i in range ()用法详解
2020/09/18 Python
Python 项目转化为so文件实例
2019/12/23 Python
python 读取、写入txt文件的示例
2020/09/27 Python
python代码实现图书管理系统
2020/11/30 Python
英国豪华文具和皮具配件经典老品牌:Smythson(斯迈森)
2018/04/19 全球购物
Ted Baker美国官网:英国时尚品牌
2018/10/29 全球购物
机电一体化专业毕业生自荐信
2014/06/19 职场文书
音乐教师求职信
2014/06/28 职场文书
2016教师给学生的毕业寄语
2015/12/04 职场文书
导游词之南京莫愁湖公园
2019/11/13 职场文书
阿里云k8s服务升级时502错误 springboot项目应用
2022/04/09 Servers