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编码)------> ...
随机推荐
- 2019-11-3:渗透测试,基础学习,bypass类型笔记
等价字符 空格:%20,+,(),%0a,%09,%a0,%0b,%0c,%0d,/**/等 =:like,regexp,liker,<>,! =等 and:&& or:x ...
- .NET自动化对象映射
对象自动映射工具是用来解决对象之间映射转换的类库,能很好地解决DTO和Model之间的相互映射赋值问题. 只要两个对象的属性具有相同名字(或者符合它规定的命名约定),对象自动映射工具就可以替我们自动在 ...
- Win10无法安装.NET Framework3.5的解决办法
诸位网友如果工作中使用WIN10遇到如图的这种问题,现将解决办法整理如下: 一.第一步就是修复系统:按“Windows+X”点击“Windows PowerShell(管理员)&命令提示符(管 ...
- 二叉树的操作--C语言实现
树是一种比较复杂的数据结构,它的操作也比较多.常用的有二叉树的创建,遍历,线索化,线索化二叉树的遍历,这些操作又可以分为前序,中序和后序.其中,二叉树的操作有递归与迭代两种方式,鉴于我个人的习惯,在这 ...
- C#语法--委托,架构的血液
委托的定义 什么是委托? 委托实际上是一种类型,是一种引用类型. 微软用delegate关键字来声明委托,delegate与int,string,double等关键字一样.都是声明用的. 下面先看下声 ...
- 基于Docker快速搭建ELK【华为云技术分享】
[摘要] 本文基于自建的Docker平台速搭建一套完整的ELK系统,相关的镜像直接从Docker Hub上获取,可以快速实现日志的采集和分析检索. 准备镜像 l 获取ES镜像:docker pull ...
- 不服跑个分:ARM鲲鹏云服务器实战评测——华为云鲲鹏KC1实例 vs. 阿里云G5实例【华为云技术分享】
原文链接:https://m.ithome.com/html/444828.htm 今年一月份,华为正式发布了鲲鹏920数据中心高性能处理器,该处理器兼容ARM架构,采用7纳米制造,最高支持64核,主 ...
- KETTLE多表关联的同步一张表的两种实现方式
以下操作都在5.0.1版本下进行开发,其余版本可以进行自动比对 在平时工作当中,会遇到这种情况,而且很常见.比如:读取对方的多个视图或者表,写入目标库的一张表中,就涉及到多表的同步. 多表同步可以有以 ...
- Cypher基本指令学习1
1.查询节点 查询所有节点match (n) return n 查询带有标签的节点 match(movie:Flyer) return movie.name 查询关联节点(查询A导演的所有电影) ma ...
- Python自动化之下拉框,隐藏标签定位 代码&报错解决
python自动化:下拉框定位方法之select标签 style="display: none;" 报错 selenium.common.exceptions.ElementNo ...