序列化是指把内存里的数据类型转换成字符串,以使其能存储到硬盘或通过网络传输到远程,因为硬盘和网络传输时只能接受bytes

一、pickle

把python对象写入到文件中的一种解决方案,但是写入到文件的是bytes. 所以这东西不是给人看的. 是给机器看的.

##

bs = pickle.dumps(obj)     把对象转为bytes

obj = pickle.loads(bs)       把bytes转为对象

pickle.dump(obj,fielname)    把对象写入到文件

obj = pickle.load(filename)   从文件中拿对象

 import pickle

 class Cat:
def __init__(self,color,name):
self.name = name
self.color = color def he(self):
print("喝水") def chi(self):
print("%s吃小鱼" % self.name)
c = Cat('黑','小花')
print(c) bs = pickle.dumps(c) #将对象转为bytes
# print(bs) cc = pickle.loads(b'\x80\x03c__main__\nCat\nq\x00)\x81q\x01}q\x02(X\x04\x00\x00\x00nameq\x03X\x06\x00\x00\x00\xe5\xb0\x8f\xe8\x8a\xb1q\x04X\x05\x00\x00\x00colorq\x05X\x03\x00\x00\x00\xe9\xbb\x91q\x06ub.'
) #将bytes转为对象
# pickle.loads 是拿着bytes的存储的对象信息和类的地址再去造一个对象,如果类增加了方法,造的对象也会具有该方法
print(cc)
cc.chi()
cc.he() #
print(cc.name,cc.color) print("-------写入文件-------------")
pickle.dump(c,open("cat.txt",mode="wb")) #将对象写到文件中
#Write a pickled representation of the given object to the open file. c2 = pickle.load(open("cat.txt",mode="rb")) #从文件拿到对象
c2.chi()
print(c2.name) print("------写入多个-------")
c1 = Cat("黑","小黑")
print(c1)
c2 = Cat('白','大白')
c3 = Cat('灰','灰灰')
lst = [c1,c2,c3] pickle.dump(lst,open("duocat.txt",mode="wb")) l = pickle.load(open("duocat.txt",mode='rb'))
for dc in l:
dc.chi()
print(dc)

pickle

二、shelve

shelve提供python的持久化操作。什么叫持久化操作呢? 就是把数据写到硬盘上。在操作shelve的时候非常的像操作一个字典。

d = shelve.open('文件名')  #打开文件,会自动生成一个 .dat 文件

d[key] =value  #赋值

d[key]   #拿值

d[key] = newvalue  #修改

d.close()   #关闭文件

注意:

修改shelve文件时要加writeback =True ,这是让内存中数据回写到文件。

 import shelve

 # d = shelve.open("shelve")
# d["小数据库"]= "shelve"
# d.close() d = shelve.open("shelve")
print(d['小数据库'])
d.close() #修改
d = shelve.open('shelve')
d['小数据库'] = '字典'
d.close() c = shelve.open('shelve')
print(c['小数据库'])
c.close() #存储复杂字典
# di = shelve.open('shelve')
# di['wf'] = {"name":"汪峰",'wife':{'name':'章子怡','hobby':'看电影'}}
# di.close()
#
# dp = shelve.open('shelve')
# print(dp['wf'])
# dp.close() #修改复杂字典 di = shelve.open('shelve',writeback=True) #
di['wf']['wife']['hobby'] ="听音乐"
di.close() dp = shelve.open('shelve')
print(dp['wf'])
dp.close()

shelve

三、json

json是我们前后端交互的枢纽,相当于编程界的普通话。json全称javascript object notation. 翻译过来叫js对象简谱。

#用json实现前后端交互:

我们的程序是 在python中写的,但是前端那边是用JS来解析json的。所以,我们需要把我们程序产生的字典转化成json格式的json串(字符串),然后网络传输,前端接收到之后,怎么处理是它的事情。

常用操作:

json.dumps(dic,ensure_ascii=False)                      把字典转换成json字符串   参数ensure_ascii=False可以让json处理中文字符

json.loads()           把json字符串转化成字典

json.dump()           把字典转换成json字符串. 写入到文件

json.load()              把文件中的json字符串读取. 转化成字典

 import json

 # 把字典转化成json字符串
dic = {"a": "女王", "b": "萝莉", "c": "小清新"}
s = json.dumps(dic)
print(s) # {"a": "\u5973\u738b", "b": "\u841d\u8389", "c":
"\u5c0f\u6e05\u65b0"} # 把字典转化成json字符串
s = json.dumps(dic, ensure_ascii=False) #加一个参数处理成中文
print(s) # {"a": "女王", "b": "萝莉", "c": "小清新"} #把json字符串转成字典
s = '{"a": "女王", "b": "萝莉", "c": "小清新"}'
dic = json.loads(s)
print(type(dic), dic) #把对象打散成json写入到文件中
dic = {"a": "女王", "b": "萝莉", "c": "小清新"}
f = open("test.json", mode="w", encoding="utf-8")
json.dump(dic, f, ensure_ascii=False)
f.close() #从文件中读取一个json
f = open("test.json", mode="r", encoding="utf-8")
dic = json.load(f)
f.close()
print(dic)

json

# # 我们可以向文件中写入多个json串,但是读取就不行了,因为写的话多个字典写到了一行,但读的时候一行里有多个字典就不好区分,所以无法正常读取。

如何解决呢?

两套方案. 方案一. 把所有的内容准备好统一 进行写入和读取. 但这样处理, 如果数据量小还好. 数据量大的话, 就不够友好了. 方案二. 不用 dump. 改用dumps和loads. 对每一行分别进行写入和读取处理.

 import json
lst = [{"a": 1}, {"b": 2}, {"c": 3}]
# 分行写入
f = open("test.json", mode="w", encoding="utf-8")
for el in lst:
s = json.dumps(el, ensure_ascii=True) + "\n"
f.write(s)
f.close()
# 读取
f = open("test.json", mode="r", encoding="utf-8")
for line in f:
dic = json.loads(line.strip())
print(dic)
f.close()

处理多个字典

四、configparser模块

该模块用于配置文件,比如配置windows的 ini格式的文件。

可以包含一个或多个节(section),每个节可以有多个参数(键=值).

整个文件相当于一个大字典,每节相当于一个小字典,可以像字典一样进行操作。

#配置文件样式

#用python初始化一个配置文件

 初始化一个配置文件 .ini后缀
config = configparser.ConfigParser() #创建对象
config['DEFAULT'] = {
"sleep": 1000,
"session-time-out": 30,
"user-alive": 999999
}
config['TEST-DB'] = {
"db_ip": "192.168.17.189",
"port": "",
"u_name": "root",
"u_pwd": ""
}
config['168-DB'] = {
"db_ip": "152.163.18.168",
"port": "",
"u_name": "root",
"u_pwd": ""
}
config['173-DB'] = {
"db_ip": "152.163.18.173",
"port": "",
"u_name": "root",
"u_pwd": ""
}
f = open("db.ini", mode="w")
config.write(f) # 写入文件
f.flush()
f.close()

初始化配置文件

#读取文件信息

 config = configparser.ConfigParser()
config.read("db.ini") # 读取文件
print(config.sections()) # 获取到section. 章节...DEFAULT是给每个章节都配备的信息
print(config.get("DEFAULT", "SESSION-TIME-OUT")) # 从xxx章节中读取到xxx信息
# 也可以像字典一样操作
print(config["TEST-DB"]['DB_IP'])
print(config["173-DB"]["db_ip"]) #可以不区分大小写
for k in config['168-DB']:
print(k)
for k, v in config["168-DB"].items():
print(k, v)
print(config.options('168-DB')) # 同for循环,找到'168-DB'下所有键
print(config.items('168-DB')) #找到'168-DB'下所有键值对
print(config.get('168-DB','db_ip')) # 152.163.18.168 get方法Section下的key对应的value

#增删改操作

 # 先读取. 然后修改. 最后写回文件
config = configparser.ConfigParser()
config.read("db.ini") # 读取文件
# 添加一个章节
# config.add_section("189-DB")
# config["189-DB"] = {
# "db_ip": "167.76.22.189",
# "port": "3306",
# "u_name": "root",
# "u_pwd": "123456"
# }
# 修改信息
config.set("168-DB", "db_ip", "10.10.10.168")
# 删除章节
config.remove_section("173-DB")
# 删除元素信息
config.remove_option("168-DB", "u_name")
# 写回文件
config.write(open("db.ini", mode="w"))

增删改

python记录_day22 序列化的更多相关文章

  1. python基础之 序列化,os,sys,random,hashlib

    1.序列化 定义: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.简单地说,JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串,然 ...

  2. 【转】Python之数据序列化(json、pickle、shelve)

    [转]Python之数据序列化(json.pickle.shelve) 本节内容 前言 json模块 pickle模块 shelve模块 总结 一.前言 1. 现实需求 每种编程语言都有各自的数据类型 ...

  3. 廖雪峰Python学习笔记——序列化

    序列化 定义:程序运行时所有变量都存在内存中,把变量从内存中变成可存储或可传输的过程称为序列化pickling,在其他语言中称为serialization,marshalling,flattening ...

  4. python 3 json 序列化

    python 3 json 序列化 我们学习过用eval内置方法可以将一个字符串转成python对象,不过,eval方法是有局限性的,对于普通的数据类型,json.loads和eval都能用,但遇到特 ...

  5. Python之路--序列化

    序列化的目的 1.以某种存储形式使自定义对象持久化 2.将对象从一个地方传递到另一个地方 3.使程序更具有维护性 json json多语言通用 四个功能:dumps.dump.loads.load # ...

  6. Python中的序列化以及pickle和json模块介绍

    Python中的序列化指的是在程序运行期间,变量都是在内存中保存着的,如果我们想保留一些运行中的变量值,就可以使用序列化操作把变量内容从内存保存到磁盘中,在Python中这个操作叫pickling,等 ...

  7. python接口测试之序列化与反序列化(四)

    在python中,序列化可以理解为:把python的对象编码转换为json格式的字符串,反序列化可以理解为:把json格式 字符串解码为python数据对象.在python的标准库中,专门提供了jso ...

  8. 一文了解Python常见的序列化操作

    关于我 一个有思想的程序猿,终身学习实践者,目前在一个创业团队任team lead,技术栈涉及Android.Python.Java和Go,这个也是我们团队的主要技术栈. Github:https:/ ...

  9. python操作文件——序列化pickling和JSON

    当我们在内存中定义一个dict的时候,我们是可以随时修改变量的内容的: >>> d=dict(name='wc',age=28) >>> d {'name': 'w ...

随机推荐

  1. LightOJ 1030 Discovering Gold(概率DP)题解

    题意:1~n每格都有金子,每次掷骰子,掷到多少走几步,拿走那格的金子,问你金子的期望 思路:dp[i]表示从i走到n金子的期望,因为每次最多走1<=x<=6步,所以dp[i] = a[i] ...

  2. Hadoop之mapreduce

    doc Hadoop初探之Stream Hadoop Stream 用python + hadoop streaming 编写分布式程序(一) -- 原理介绍,样例程序与本地调试 用python + ...

  3. insert into table (a,b,c) select

    本文为博主原创,转载请注明出处: 在项目中,需要统计数据,从基础表中的数据进行统计,并插入到汇总 表中, (1)语句形式为:Insert into Table2(field1,field2,...) ...

  4. HNOI2017 游记

    如果你要问我为什么现在才发出来,那是因为我太懒了 Day0: 日常看板子……不想写题,嘴巴了几道题之后也不想写…… 到了晚上颓起来了……回想了一下似乎也没有立什么flag,那就愉快地颓吧……深感技术下 ...

  5. 【bzoj】4538: [Hnoi2016]网络

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4538 维护一个数据结构支持对于一颗树的操作,需要支持: 1.对于树上的一条路径上的每个点上 ...

  6. App.Config自定义配置节点

    配置文件: <?xml version="1.0" encoding="utf-8"?> <configuration> <con ...

  7. "不是内部或外部命令"

    问题描述: 使用cmd 运行某个路径下(一般是C:PROGRAM FILES\...或者E:\program files\....或者D:\program files\......下面的某个)的exe ...

  8. 利用vue-cli3快速搭建vue项目详细过程

    一.介绍 Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统.有三个组件: CLI:@vue/cli 全局安装的 npm 包,提供了终端里的vue命令(如:vue create .vue ...

  9. Qt基本布局(QLayout)

    概述 Qt提供了QHBoxLayout类(水平排列布局),QVBoxLayout类(垂直排列布局),QGridLayout类(网格排列布局)等基本布局管理.它们之间的继承关系如下图 布局中常用的方法有 ...

  10. CSS 控制鼠标在元素停留的样式

    以下资料来自网络,收藏学习总结用: 有时候需要改变鼠标样式,DIV 可以改成手型等,A也可以改成光标形式 巧合要用到鼠标样式效果,就顺便整理了下十五种CSS鼠标样式,小例子供大家使用啊.CSS鼠标样式 ...