模块 序列化 json pickle shelv xml

序列化

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


json 模块

json.dump(d,f)   json.load(f)     #与文件得交互  dump(可多次,但不那样做)  load(只可一次) 

把数据类型转成字符串存到内存里得意义?
json.dumps(data)   json.loads(q)  #与内存得交互
1.把内存数据 通过网络 共享给远程其他人  必须:bytes
2.定义了不同语言之间得交互规则
  2.1 纯文本:坏处不能共享复杂得数据类型
      18:32  424224  iphone  5000
  2.2 xml 占得空间大 效率低
      <data>
        <country>
            <year>2018</year>  # year:2018
        </country>
      </data>
  2.3 json 简单 可读性好
      data = {
         'roles':[
             {'role':'monster','type':'pig','life':50},
             {'role':'hero','type':'关羽','life':80}
         ]
      }

import json

data = {
    'roles':[
        {'role':'monster','type':'pig','life':50},
        {'role':'hero','type':'关羽','life':80}
    ]
}

s = json.dumps(data)
print(s,type(s))
data = json.loads(s)
print(data,type(data),data['roles'])

json.dump(data,open('test.json','w',encoding='utf-8'))
data = json.load(open('test.json','r',encoding='utf-8'))
print(data['roles'],type(data))

pickle 模块

rb wb  和json得四个方法一样 写读 都是bytes形式的 可以将函数dump load都行 

 pickle.dumps(d)    json.loads(d)
 pickle.dump(d,pk)  pickle.load(pk)  

import pickle

data = {
    'roles':[
        {'role':'monster','type':'pig','life':50},
        {'role':'hero','type':'关羽','life':80}
    ]
}

def sayhi():
    print('sayhi')

s = pickle.dumps(data)
print(s,type(s))
data = pickle.loads(s)
print(data,type(data),data['roles'])

pickle.dump(data,open('test.json','wb'))
data = pickle.load(open('test.json','rb'))
print(data,type(data))

s = pickle.dumps(sayhi)
print(s)
data = pickle.loads(s)
data()
pickle.dump(sayhi,open('test1.json','wb'))
pickle.load(open('test1.json','rb'))()

json 和 pickle 得区别

json    转化得数据类型:str int list tuple dict 不支持set
pickle  支持python里得所有数据类型 确定是 只能在python里使用  函数都可以序列化 

shelve 模块

pickle封装了shelve 只能在python中用

序列化:
import shelve

f = shelve.open('shelve_test')  # 打开一个文件
names = ["alex", "rain", "test"]
info = {'name':'alex','age':22}
f["names"] = names  # 持久化列表
f['info_dic'] = info
f.close()

反序列化:
import shelve
d = shelve.open('shelve_test')  # 打开一个文件
print(d['names'])
print(d['info_dic'])

#del d['test'] #还可增加 删除 可整体重新赋值 

xml 模块

作用:
不同语言之间内存数据得交换
内存得数据可转换成xml存到硬盘上

1.xml的格式如下,就是通过<>节点来区别数据结构的:
<?xml version="1.0"?>
<data>
    <country name="Liechtenstein">
        <rank updated="yes">2</rank>
        <year>2008</year>
        <gdppc>141100</gdppc>
        <neighbor name="Austria" direction="E"/>
        <neighbor name="Switzerland" direction="W"/>
    </country>
    <country name="Singapore">
        <rank updated="yes">5</rank>
        <year>2011</year>
        <gdppc>59900</gdppc>
        <neighbor name="Malaysia" direction="N"/>
    </country>
    <country name="Panama">
        <rank updated="yes">69</rank>
        <year>2011</year>
        <gdppc>13600</gdppc>
        <neighbor name="Costa Rica" direction="W"/>
        <neighbor name="Colombia" direction="E"/>
    </country>
</data>

2.xml协议在各个语言里的都 是支持的,在python中可以用以下模块操作xml   
import xml.etree.ElementTree as ET

tree = ET.parse("xmltest.xml")
root = tree.getroot()
print(root.tag)

#遍历xml文档
for child in root:
    print(child.tag, child.attrib)
    for i in child:
        print(i.tag,i.text)

#只遍历year 节点
for node in root.iter('year'):
    print(node.tag,node.text)

3.修改和删除xml文档内容
import xml.etree.ElementTree as ET

tree = ET.parse("xmltest.xml")
root = tree.getroot()

#修改
for node in root.iter('year'):
    new_year = int(node.text) + 1
    node.text = str(new_year)
    node.set("updated","yes")

tree.write("xmltest.xml")

#删除node
for country in root.findall('country'):
   rank = int(country.find('rank').text)
   if rank > 50:
     root.remove(country)

tree.write('output.xml')

4.自己创建xml文档
import xml.etree.ElementTree as ET

new_xml = ET.Element("namelist")
name = ET.SubElement(new_xml,"name",attrib={"enrolled":"yes"})
age = ET.SubElement(name,"age",attrib={"checked":"no"})
sex = ET.SubElement(name,"sex")
sex.text = '33'
name2 = ET.SubElement(new_xml,"name",attrib={"enrolled":"no"})
age = ET.SubElement(name2,"age")
age.text = '19'

et = ET.ElementTree(new_xml) #生成文档对象
et.write("test.xml", encoding="utf-8",xml_declaration=True)

ET.dump(new_xml) #打印生成的格式

原文地址:https://www.cnblogs.com/ham-731/p/12121428.html

时间: 2024-11-13 03:44:17

模块 序列化 json pickle shelv xml的相关文章

保存数据到文件的模块(configparser,json,pickle,shelve,xml)_python

一.各模块的主要功能区别 configparser模块:保存字典内容到文件,并按照一定的格式写入文件保存. shelve模块:将对象写入到文件,保存没有格式,较为轻便. json模块:将对象从内存中完成序列化存储,但是不能对函数和类进行序列化,写入的格式是明文. pickle模块:将对象从内存中完成序列化存储,可以能对函数进行序列化,写入的格式是二进制格式. xml模块:不同语言或程序之间数据交换(较少用) 二.各模块使用例子 1.configparser模块 (1)写入文件 import co

常用模块---sys&amp;logging&amp;序列化模块(json&amp;pickle)

sys 模块 sys.argv 命令行参数List,第一个元素是程序本身路径,通常用来避免io 阻塞 print('欢迎进入') info=sys.argv if info[index('-u')+1] == 'mona' and info[index('-p')+1] == '123': print('login successful') sys.exit(n) 退出程序,正常退出时exit(0) count=1 while count<10: if count == 8: sys.exit(

常用模块(json/pickle/shelve/XML)

一.json模块(重点) 一种跨平台的数据格式 也属于序列化的一种方式 介绍模块之前,三个问题: 序列化是什么? 我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化. 反序列化又是什么? 将硬盘上存储的中间格式数据在还原为内存中的数据结构 为什么要序列化? 1.持久保持状态 2.跨平台数据的交互 JSON是什么? java script object notation 就是对象表示法 var obj = {"name":"egon"} 对于我们开发而言 j

Python全栈开发记录_第八篇(模块收尾工作 json &amp; pickle &amp; shelve &amp; xml)

由于上一篇篇幅较大,留下的这一点内容就想在这里说一下,顺便有个小练习给大家一起玩玩,首先来学习json 和 pickle. 之前我们学习过用eval内置方法可以将一个字符串转成python对象,不过,eval方法是有局限性的,对于普通的数据类型,json.loads和eval都能用,但遇到特殊类型的时候,eval就不管用了,所以eval的重点还是通常用来执行一个字符串表达式,并返回表达式的值. 什么是序列化? 我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在Python中叫pic

【python】-- json &amp; pickle、xml、requests、hashlib、shelve、shutil、configparser、subprocess

json & pickle Python中用于序列化的两个模块 json     用于[字符串]和 [python基本数据类型] 间进行转换 pickle   用于[python特有的类型] 和 [python基本数据类型]间进行转换 Json模块提供了四个功能:dumps.dump.loads.load 1.dumps序列化和loads反序列化 dumps()序列化 import json #导入json模块 info = { 'name':"zhangqigao", &qu

Python学习第十三天 time datetime random os sysshutil json pickle shelve xml configparser hashlib suprocess logging re

https://www.cnblogs.com/yuanchenqi/articles/5732581.html https://www.cnblogs.com/linhaifeng/articles/6384466.html#_label2 一 time与datetime模块 在Python中,通常有这几种方式来表示时间: 时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量.我们运行“type(time.time())”,返回的是fl

Day 4-5 序列化 json &amp; pickle

序列化: 序列化是指把内存里的数据类型转变成字符串,以使其能存储到硬盘或通过网络传输到远程,因为硬盘或网络传输时只能接受bytes. 反序列化: 把字符转成内存里的数据类型. 用于序列化的两个模块.他们的使用方法完全一样. json,用于字符串 和 python数据类型间进行转换 pickle,用于python特有的类型 和 python的数据类型间进行转换 Json模块提供了四个功能:dumps.dump.loads.load pickle模块提供了四个功能:dumps.dump.loads.

模块之json,pickle,os,sys,logging

json模块 序列化: 将python的数据类型存成 json串 反序列化: 将json串 读成python的数据类型 跨平台 dict/list dic = {'a':1} # 内存中转化 data = json.dumps(dic) data = json.loads(data) # 文件中转化 with open() as fw: json.dump(dic, fw) with open() as fr: data = json.load(fr) pickle模块 不能跨平台,但是支持py

os模块,sys模块,json / pickle模块,logging模块

目录 OS模块 sys模块 json和pickle模块 序列化和反序列化 json模块 pickle logging模块 OS模块 能与操作系统交互,控制文件 / 文件夹 # 创建文件夹 import os os.mkdir(r'D:\py_case\test') # 删除文件夹 os.rmdir(r'D:\py_case\test') # # 列出指定目录下所有文件和子目录 (子目录文件不会列出来) res = os.listdir(r'D:\pycharm_project\Test') pr