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 相关文章推荐
简单解析Django框架中的表单验证
Jul 17 Python
Python中基本的日期时间处理的学习教程
Oct 16 Python
python字符串连接方法分析
Apr 12 Python
Python全局变量与局部变量区别及用法分析
Sep 03 Python
python dataframe向下向上填充,fillna和ffill的方法
Nov 28 Python
Python中的 is 和 == 以及字符串驻留机制详解
Jun 28 Python
python tkinter库实现气泡屏保和锁屏
Jul 29 Python
Python PyQt5模块实现窗口GUI界面代码实例
May 12 Python
Pytorch生成随机数Tensor的方法汇总
Sep 09 Python
pytest fixtures装饰器的使用和如何控制用例的执行顺序
Jan 28 Python
Pandas数据分析的一些常用小技巧
Feb 07 Python
Python实现提取PDF简历信息并存入Excel
Apr 02 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
Yii实现自动加载类地图的方法
2015/04/01 PHP
php操作redis缓存方法分享
2015/06/03 PHP
Yii2实现log输出到file及database的方法
2016/11/12 PHP
redirect_uri参数错误的解决方法(必看)
2017/02/16 PHP
javascript 延迟加载技术(lazyload)简单实现
2011/01/17 Javascript
JavaScript判断变量是否为数组的方法(Array)
2016/02/24 Javascript
Extjs实现下拉菜单效果
2016/04/01 Javascript
IE和Firefox之间在JavaScript语法上的差异
2016/04/22 Javascript
创建一个类Person的简单实例
2016/05/17 Javascript
JavaScript学习笔记整理_关于表达式和语句
2016/09/19 Javascript
javascript简单进制转换实现方法
2016/11/24 Javascript
JavaScript获取服务器端时间的方法
2016/11/29 Javascript
vue 和vue-touch 实现移动端左右导航效果(仿京东移动站导航)
2017/04/22 Javascript
详解HTML5 使用video标签实现选择摄像头功能
2017/10/25 Javascript
基于vue实现分页效果
2017/11/06 Javascript
jQuery实现的鼠标拖动浮层功能示例【拖动div等任何标签】
2018/12/29 jQuery
js中怎么判断两个字符串相等的实例
2019/01/17 Javascript
Vuex实现数据共享的方法
2019/12/20 Javascript
[01:05:40]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS DT第三场
2014/05/24 DOTA
[01:47]2018年度DOTA2最具人气解说-完美盛典
2018/12/16 DOTA
Python多维/嵌套字典数据无限遍历的实现
2016/11/04 Python
python+matplotlib演示电偶极子实例代码
2018/01/12 Python
python程序封装为win32服务的方法
2021/03/07 Python
Python2和3字符编码的区别知识点整理
2019/08/08 Python
python每天定时运行某程序代码
2019/08/16 Python
Django框架中间件定义与使用方法案例分析
2019/11/28 Python
在OpenCV里实现条码区域识别的方法示例
2019/12/04 Python
python里反向传播算法详解
2020/11/22 Python
python抢购软件/插件/脚本附完整源码
2021/03/04 Python
HTML5响应式(自适应)网页设计的实现
2017/11/17 HTML / CSS
Jdbc数据访问技术面试题
2012/03/30 面试题
党员干部公开承诺书
2014/03/26 职场文书
破坏寝室公物检讨书
2014/11/17 职场文书
催款函怎么写
2015/06/24 职场文书
网络研修心得体会
2016/01/08 职场文书
Python多线程实用方法以及共享变量资源竞争问题
2022/04/12 Python