python--(常用模块-2序列化)

一.序列化:

  把对象打散成bytes或者字符串。 方便存储和传输 序列化
  把bytes或者字符串转换回对象。 反序列化

# dumps 序列化。 把对象转化成bytes
# loads 反序列化。 把bytes转化成对象
# dump 序列化。 把对象转化成bytes并写入文件
# load 反序列化。把文件中的bytes读取。转化成对象

二.pickle(比较重要)

  把python中所有的对象都可以转化成bytes。进行存储和传输

  

 # import pickle
# class Cat:
# def __init__(self,name,age):
# self.name = name
# self.age = age
#
# def catchMouse(self):
# print(self.name,"抓老鼠")
# c = Cat("jerry",18)
# bs = pickle.dumps(c) #序列化一个对象
# print(bs)#一堆二进制,看不懂
#
# cc = pickle.loads(bs) #把二进制反序列化成我们的对象
# cc.catchMouse() # lst = [Cat("jerry",Cat("tommy",20),Cat("alpha",21))]
#
# f = open("cat",mode = "wb")
# pickle.dump(lst,f) #写入到文件中
#
# f = open("cat",mode = "rb")
# l1 = pickle.load(f) #从文件中读取
# for i in l1:
# i.catchMouse()

三.shelve 

  shelve提供python的持久化操作. 什么叫持久化操作呢? 说⽩话,就是把数据写到硬盘上.
  在操作shelve的时候非常的像操作⼀个字典. 这个东⻄到后期. 就像redis差不多.

 import shelve

 # 打开一个文件
# f = shelve.open("大阳哥", writeback=True)
# f['jj'] = "林俊杰"
# f['dyg'] = "大阳哥"
# f['zzr'] = "周芷若" # f = {}
# 像操作字典一样操作文件
# f["jay"] = "周杰伦"
# print(f['jay']) # f["jay"] = {'name': "周杰伦", 'age': 38, "hobby": "吃喝拉撒睡"} # f['jay']['name'] = "胡辣汤"
# print(f['jay']['name'])
# print(f['jay']) # f.close() f = shelve.open("大阳哥")
# print(f.keys())
# for k in f.keys(): # 可以获取到所有的key
# print(k)
#
# for k in f:
# print(k)
#
# for k, v in f.items():
# print(k, v)

四.json(重点)  

  json是我们前后端交互的枢纽. 相当于编程界的普通话. ⼤家沟通都⽤
   json. 为什么这样呢? 因为json的语法格式可以完美的表⽰出⼀个对象. 那什么是json: json全
   称javascript object notation. 翻译过来叫js对象简谱.

 # import json
# dic = {"a":"女王","b":"萝莉","c":"小仙女"}
# s = json.dumps(dic) #把字典转换成json字符串
# print(s)
# #{"a": "\u5973\u738b", "b": "\u841d\u8389", "c": "\u5c0f\u4ed9\u5973"}
#
# import json
# dic = {"a":"女王","b":"萝莉","c":"小仙女"}
# s = json.dumps(dic,ensure_ascii=False) #ensure_ascii=False 去asxiii码
# print(type(s),s)
# #<class 'str'> {"a": "女王", "b": "萝莉", "c": "小仙女"}
#
# import json
# s = '{"a": "⼥王", "b": "萝莉", "c": "小仙女"}'
# dic = json.loads(s)
# print(type(dic),dic)
# #<class 'dict'> {'a': '⼥王', 'b': '萝莉', 'c': '小仙女'} # #写入文件
# dic = {"a": "⼥王", "b": "萝莉", "c": "⼩清新"}
# f = open("test.json", mode="w", encoding="utf-8")
# json.dump(dic, f, ensure_ascii=False) # 把对象打散成json写⼊到⽂件中
# f.close()
#
# #读取文件
# f = open("test.json", mode="r", encoding="utf-8")
# dic = json.load(f)
# f.close()
# print(dic) # 注意我们可以向同一个文件写入多个json串,但是读不行.
# 写入的时候
# 1. 循环
# 2. 用dumps把字典转化成字符串, 然后手工在后面加一个\n
# 3. 写出
# f = open("new_menu.json", mode="w", encoding="utf-8")
# lst = [{"a": "胡辣汤"},{"b":"吱吱冒油的大猪蹄子"},{"c": "盖浇饭"},{"d":"马拉"},{"e":"法国大蜗牛"}]
# for el in lst:
# s = json.dumps(el, ensure_ascii=False) + "\n"
# f.write(s)
#
# f.flush()
# f.close() # 读取的时候
# 1. for line in f:
# 2. strip()去掉空白
# 3. loads()变成字典 # f = open("new_menu.json", mode="r", encoding="utf-8")
# for line in f:
# line = line.strip()
# dic = json.loads(line)
# print(dic)

六.configparser

  该模块适用于配置⽂件的格式与windows ini⽂件类似,可以包含一个或多个节(section)每个节
  可以有多个参数(键=值). 首先, 我们先看一个xxx服务器的配置文件

 [DEFAULT] [DEFAULT]
ServerAliveInterval = 45
Compression = yes
CompressionLevel = 9
ForwardX11 = yes
[[bitbucket.org bitbucket.org]]
User = hg
[[topsecret.server.com topsecret.server.com]]
Port = 50022
ForwardX11 = no

   我们用configparser就可以对这样的文件进行处理.首先,是初始化

 import configparser
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--(常用模块-2序列化)的更多相关文章

  1. Python 常用模块(2) 序列化(pickle,shelve,json,configpaser)

    主要内容: 一. 序列化概述 二. pickle模块 三. shelve模块 四. json模块(重点!) 五. configpaser模块 一. 序列化概述1. 序列化: 将字典,列表等内容转换成一 ...

  2. (转)python常用模块(模块和包的解释,time模块,sys模块,random模块,os模块,json和pickle序列化模块)

    阅读目录 1.1.1导入模块 1.1.2__name__ 1.1模块 什么是模块: 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代 ...

  3. python——常用模块2

    python--常用模块2 1 logging模块 1.1 函数式简单配置 import logging logging.debug("debug message") loggin ...

  4. python常用模块之shelve模块

    python常用模块之shelve模块 shelve模块是一个简单的k,v将内存中的数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据类型 我们在上面讲json.pickle ...

  5. python常用模块之json、pickle模块

    python常用模块之json.pickle模块 什么是序列化? 序列化就是把内存里的数据类型转换成字符,以便其能存储到硬盘或者通过网络进行传输,因为硬盘或网络传输时只接受bytes. 为什么要序列化 ...

  6. python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib subprocess logging re正则

    python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib  subprocess ...

  7. python常用模块集合

    python常用模块集合 Python自定义模块 python collections模块/系列 Python 常用模块-json/pickle序列化/反序列化 python 常用模块os系统接口 p ...

  8. Python常用模块小结

    目录 Python常用模块小结 一.Python常用模块小结 1.1 time模块 1.2 datetime模块 1.3 random模块 1.4 os模块 1.5 sys模块 1.6 json模块 ...

  9. python常用模块 以及第三方导入

    python常用模块 1模块的分类 标准模块(内置模块)( 标准库 )300 第三方模块 18万 pip install 直接通过pip安装 软件一般会被自动安装你python安装目录的这个子目录里 ...

  10. Python常用模块之sys

    Python常用模块之sys sys模块提供了一系列有关Python运行环境的变量和函数. 常见用法 sys.argv 可以用sys.argv获取当前正在执行的命令行参数的参数列表(list). 变量 ...

随机推荐

  1. Hbash语句

    下面我们看看HBase Shell的一些基本操作命令,我列出了几个常用的HBase Shell命令,如下:   名称 命令表达式 创建表 create '表名称', '列名称1','列名称2','列名 ...

  2. applicationContext-solr.xml

    一.动态切换单机和集群 spring-solr 的配置 <!-- 单机版 solrj --> <bean id = "httpSolrServer" class= ...

  3. 统制Highcharts中x轴和y轴坐标值的密度

    统制Highcharts中x轴和y轴坐标值的密度 www.MyException.Cn 发布于:2012-06-26 10:04:13 浏览:688次 1 控制Highcharts中x轴和y轴坐标值的 ...

  4. CF 558C(Amr and Chemistry-构造法)

    C. Amr and Chemistry time limit per test 1 second memory limit per test 256 megabytes input standard ...

  5. Android nomedia 避免图片等资源泄露在系统图库其中

    总结 Android nomedia 避免文件泄露在系统图库和系统铃声中 在应用开发中 项目的图片总是被系统的图库收录了 避免图片被系统图库收录的发现有2个方法 第一种针对图片 将 .png为后缀的图 ...

  6. Linux 下配置,安装Hadoop

    1.从官网上下载hadoop-2.4.1.tar.gz,我的版本为hadoop-2.4.1,可在http://pan.baidu.com/s/1cLAKCQ 下载. 2.解压hadoop-2.4.1. ...

  7. hdoj--1166--敌兵布阵(线段树)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  8. BZOJ 4358 坑 莫队+线段树 死T

    这是一个坑 竟然卡nsqrt(n)logn T死 等更 //By SiriusRen #include <cmath> #include <cstdio> #include & ...

  9. 本地PC安裝Centos 6.5 操作手冊

    http://www.xlgps.com/article/130038.html 一.准备工作 1.下载Centos6.5 ISO文件 我在官网上下的6.5版本CentOS-6.5-x86_64-bi ...

  10. Spark SQL 编程API入门系列之Spark SQL的作用与使用方式

    不多说,直接上干货! Spark程序中使用SparkSQL 轻松读取数据并使用SQL 查询,同时还能把这一过程和普通的Python/Java/Scala 程序代码结合在一起. CLI---Spark ...