python操作文件——序列化pickling和JSON
当我们在内存中定义一个dict的时候,我们是可以随时修改变量的内容的:
>>> d=dict(name='wc',age=28)
>>> d
{'name': 'wc', 'age': 28}
我们可以随时修改name和age的值。但是当我们重新运行程序的时候,name、age的初始化值还是wc和28,实际情况下我们需要保存该dict的最后的值。
我们把变量从内存中变成可存储或传输的过程称之为序列化。python中称之为pickling,Java中叫serialization,都是一个意思。序列化之后我们就可以把内容写入到磁盘或者通过网络传输出去。反之,把变量从序列化的对象重新读取到内存中称之为反序列化,洋名叫unpickling。
python中实现序列化的模块叫pickle。pickle.dumps()方法可以把任意的对象序列化成一个Bytes,然后就可以把这个bytes写入文件。pickle.dump()方法可以直接把对象序列化写入一个file-like的对象中。相反的,pickle.loads()方法可以把文件中的内容读入到一个bytes,然后把这个bytes对象转换为目标类型对象,也可以使用pickle.load()方法直接从一个file-like对象中直接反序列化出对象:
>>> f = open('E:\\python3.6.3\\workspace\\dump.txt','wb')
>>> pickle.dump(d,f)
>>> f.close()
>>> f=open('E:\\python3.6.3\\workspace\\dump.txt','rb')
>>> c = pickle.load(f)
>>> c
{'name': 'wc', 'age': 28}
JSON
实际开发中我们或多或少都会碰到跨语言传输数据的问题,这就要求我们要把对象序列化为标准格式,比如JSON和XML。JSON的表现形式就是一个字符串,可以被所有的语言读取。可以方便的存储到磁盘或者通过网络传输。JSON表示的对象是标准的JavaScript的对象,其和python内置的数据类型的对应关系如下:
JSON类型 | Python类型 |
{} | dict |
[] | list |
"" | str |
123.4 | int 或 float |
true/false | True/False |
null | None |
python内置了json模块可以方便的在python对象和json对象之间转换:
>>> import json
>>> d=dict(name='wc',age=28)
>>> json.dumps(d)
'{"name": "wc", "age": 28}'
>>> c = json.dumps(d)
>>> d=json .loads(c)
>>> d
{'name': 'wc', 'age': 28}
python内置的数据类型可以直接转换为json类型,但是class对象并不刻意直接转为json,这是因为class对象默认的并不具有可序列化的属性。
2种方法,第一种是通过dumps()方法的default参数,把任意一个对象转换为一个可序列化的对象。下面的例子中,先定义一个Student的class,然后定义一个student2dict()函数,该函数的作用就是把Student的属性转换为dict,最后再序列化为json:
>>> import json
>>> class Student(object):
... def __init__(self,name,age):
... self.name = name
... self.age = age
...
>>> def student2dict(s):
... return {'name':s.name,'age':s.age}
...
>>> s=Student('wc',28)
>>> print(json.dumps(s,default=student2dict))
{"name": "wc", "age": 28}
第二种方法,借用class对象的__dict__属性:
>>> class Teacher(object):
... def __init__(self,name,age):
... self.name = name
... self.age = age
...
>>> t = Teacher('ly',90)
>>> print(json.dumps(t,default=lambda obj:obj.__dict__))
{"name": "ly", "age": 90}
python操作文件——序列化pickling和JSON的更多相关文章
- 使用python操作文件实现购物车程序
使用python操作文件实现购物车程序 题目要求如下: 实现思路 始终维护一张字典,该字典里保存有用户账号密码,购物车记录等信息.在程序开始的时候读进来,程序结束的时候写回文件里去.在登录注册的部分, ...
- Python操作文件、文件夹、字符串
Python 字符串操作 去空格及特殊符号 s.strip().lstrip().rstrip(',') 复制字符串 #strcpy(sStr1,sStr2) sStr1 = 'strcpy' sSt ...
- Python操作文件和目录
Python操作文件和目录 读写文件比较简单,有一点特别注意就好了 windows下Python默认打开的文件以gbk解码,而一般我们的文件是utf-8编码的,所以如果文本含有中文,就会出现异常或者乱 ...
- python操作文件练习,配置haproxy
在使用python操作文件的时候,特别是对于网络设备,通常操作配置文件,会简化配置量,配置文件加载到内存中,运行时使用的是内存中的配置,内存中配置修改后立即生效,如果不将配置内容保存到硬盘中,则下次重 ...
- Python操作文件-20181121
Python操作文件 Python操作文件和其他语言一样,操作的过程无非是先定位找到文件.打开文件,然后对文件进行操作,操作完成后关闭文件即可. 文件操作方式:对文件进行操作,主要就是读.写的方式,p ...
- 用Python操作文件
用Python操作文件 用word操作一个文件的流程如下: 1.找到文件,双击打开. 2.读或修改. 3.保存&关闭. 用Python操作文件也差不多: f=open(filename) # ...
- 文件操作mode学习总结-----Python学习总结【第四篇】:Python之文件操作(文件、正则、json、pickle)
非常全的博客,防丢链接参考https://www.cnblogs.com/madsnotes/articles/5521551.html 1.文件操作 1.1 操作流程 1)文件打开 2)文件操作 3 ...
- python操作文件案例二则
前言 python 对于文件及文件夹的操作. 涉及到 遍历文件夹下所有文件 ,文件的读写和操作 等等. 代码一 作用:查找文件夹下(包括子文件夹)下所有文件的名字,找出 名字中含有中文或者空格的文件 ...
- open -python操作文件
一打开文件 二操作文件 三关闭文件 open(文件,模式,编码),打开文件----->0101010(以二进制的方式打开)------>编码(open默认utf-8编码)------> ...
随机推荐
- linux终端操作
------------恢复内容开始------------ tab键自动补全 ls列出当前文件目录: 默认是当前目录 “.”代表当前目录 “..”代表父目录 -a显示所有,而隐藏文件的第一字符为点“ ...
- 一个HTML5培训班毕业生的找工作随笔
昨天刚参加完一个面试,通过了.写个随笔记录一下. 先介绍一下背景. 我是今年十月份的时候从某个培训机构的HTML5 Web前端培训班毕业的,是一个刚进入IT行业的新人. 本人毕业于某三流学校,在参加培 ...
- 题解 P1226 【【模板】快速幂||取余运算】
1.题目分析 原题 本题在于快速幂的使用,以及对long long的应用问题. 2.解题思路 快速幂 求幂常见用法: int pow(int a,int b) { int ans; for(int i ...
- 和SharpDX坑爹的Variant刚正面
和SharpDX坑爹的Variant刚正面 几个月前我写了和篇文章<.NET中生成动态验证码>文章,其实里面藏着一个大坑.运行里面的代码,会发现运行的gif图片并没有循环播放: 细心的网友 ...
- 基于 HTML5 + WebGL 的宇宙(太阳系) 3D 可视化系统
前言 近年来随着引力波的发现.黑洞照片的拍摄.火星上存在水的证据发现等科学上的突破,以及文学影视作品中诸如<三体>.<流浪地球>.<星际穿越>等的传播普及,宇宙空间 ...
- 删除排序数组中的重复项II
Given a sorted array nums, remove the duplicates in-place such that duplicates appeared at most twic ...
- P1046 陶陶摘苹果
题目描述 陶陶家的院子里有一棵苹果树,每到秋天树上就会结出1010个苹果.苹果成熟的时候,陶陶就会跑去摘苹果.陶陶有个3030厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试. 现在 ...
- 在Windows系统中构建还原ASP.NET Core 源码
大家好,这几天试着从Github上拉取AspNetCore的源码,尝试着通过Visual Studio 打开,但是并不尽人意.我们需要去构建我们拉去的源代码,这样才可以通过VisualStudio可还 ...
- Docker简介与安装
简介与安装 简介 Docker是什么 一款产品从开发到上线,从操作系统,到运行环境,再到应用配置.作为开发+运维之间的协作我们需要关心很多东西,这也是很多互联网公司都不得不面对的问题,特别是各种版本的 ...
- ASCII, Unicode, UTF-8
(本文参考:http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html) 1. ASCII码 我们知道,在计算机内部,所有的 ...