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. mknod指令详解

    mknod - make block or character special filesmknod [OPTION]... NAME TYPE [MAJOR MINOR]    option 有用的 ...

  2. TensorFlow 制作自己的TFRecord数据集

    官网的mnist和cifar10数据之后,笔者尝试着制作自己的数据集,并保存,读入,显示. TensorFlow可以支持cifar10的数据格式, 也提供了标准的TFRecord 格式,而关于 ten ...

  3. 【hihocoder 1303】模线性方程组

    [题目链接]:http://hihocoder.com/problemset/problem/1303 [题意] [题解] /* x % m[1] = r[1] x % m[2] = r[2] x = ...

  4. ssm整合shiro—实现认证和授权

    1.简述 1.1    Apache Shiro是Java的一个安全框架.是一个相对简单的框架,主要功能有认证.授权.加密.会话管理.与Web集成.缓存等. 1.2   Shiro不会去维护用户.维护 ...

  5. HDU 3306

    先转一些   http://www.cnblogs.com/frog112111/archive/2013/05/19/3087648.html Fibonacci数列:F(0)=1 , F(1)=1 ...

  6. POI对Excel单元格进行颜色设置

    POI对Excel单元格进行颜色设置 学习了:http://www.myexception.cn/program/1932587.html HSSFWorkbook workbook = new HS ...

  7. 路由器一键桥接Android实现

    開始之前,首先说一下什么叫一键桥接,所谓一键桥接,就是点击一下.就能够对所连接的路由器进行网络中继设置.以实现路由器能够通过已有的无线路由器进行网络訪问. 那么实现这个功能有几种方法呢?能够说有非常多 ...

  8. mysql设置远程訪问数据库的多种方法

    问题:MySQL权限设置正确,但仍无法远程訪问.通过telnet发现3306port未打开. 分析:MySQL默认仅仅绑定127.0.0.1,即:仅仅有在本机才干訪问3306port. 解决:找到My ...

  9. 程序猿的量化交易之路(18)--Cointrader之Event实体(6)

    转载需注明: 事件,是Esper的重要概念. 这里我们定义个事件类.它是Temporal实体的派生类. 不过对Temporal简单的包装.其代码例如以下: package org.cryptocoin ...

  10. .NET泛型初探

    总所周知,.NET出现在.net framework 2.0,为什么要在2.0引入泛型那,因为微软在开始开发.net框架时并没有想过多个类型参数传输时对方法的重构,这样一来,开发人员就要面对传输多种类 ...