Python学习笔记(六)

json & pickle 模块(序列化)

json和pickle都是序列化内存数据到文件

json和pickle的区别是:

  • json是所有语言通用的,但是只能序列化最基本的数据类型(字符串、字典、列表),像函数、类、python日期都不能序列化
  • pickle可以序列化python几乎所有的数据类型

如果两个程序都需要交互内存数据,如果都是python语言的情况下,复杂的交互用pickle。

用于序列化的两个模块

  • json,用于字符串 和 python数据类型间进行转换
  • pickle,用于python特有的类型 和 python的数据类型间进行转换

Json模块提供了四个功能:dumps、dump、loads、load

pickle模块提供了四个功能:dumps、dump、loads、load

dumps和dump区别:


1

2

3

4

pickle.dump(info,f)

#print(pickle.dumps(info))

#f.write(pickle.dumps(info))

loads和load区别:


1

2

3

data_from_atm=pickle.load(f)

#data_from_atm=pickle.loads(f.read())

pickle(python中独有,支持所有python数据类型)

将字典转化为字符串

import pickle
f= open("user_acc.txt","wb")

info={
    "alex":"123",
    "jack":"4444"
}

f.write(pickle.dumps(info))
f.close()

将字符串转化为字典

import pickle
f= open("user_acc.txt","rb")

data_from_atm=pickle.loads(f.read())

print(data_from_atm)

  

json(是所有语言通用的,支持字典,列表,元组)

将字典转化为字符串

import pickle
import json
f= open("user_acc.txt","w")

info={
    "alex":"123",
    "jack":"4444"
}

f.write(json.dumps(info))
f.close()

  

将字符串转化为字典

import pickle,json
f= open("user_acc.txt","r")
data_from_atm=json.loads(f.read())
print(data_from_atm)

  

实例:

 常用模块之shelve模块

shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

import shelve

 

= shelve.open(‘shelve_test‘#打开一个文件

 

class Test(object):

    def __init__(self,n):

        self.n = n

 

 

= Test(123)

t2 = Test(123334)

 

name = ["alex","rain","test"]

d["test"= name #持久化列表

d["t1"= t      #持久化类

d["t2"= t2

 

d.close()

shelve和pickle的区别是:

shelve比pickle模块简单,只有一个open函数,返回类似字典的对象,可读可写,另外shelve想重复dump多少个对象都可以

常用模块之xml处理

xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,不过,古时候,在json还没诞生的黑暗年代,大家只能选择用xml呀,至今很多传统公司如金融行业的很多系统的接口还主要是xml。

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>

xml协议在各个语言里的都 是支持的,在python中可以用以下模块操作xml


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

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 in child:

        print(i.tag,i.text)

 

#只遍历year 节点

for node in root.iter(‘year‘):

    print(node.tag,node.text)

修改和删除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‘)

自己创建xml文档


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

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) #打印生成的格式

时间: 2024-12-13 23:58:05

Python学习笔记(六)的相关文章

Python学习笔记六:列表、元组、字典

学习其他语言很少关注数组是的结构是怎么回事,都是直接使用.Python定义了列表.元组.字典三种数据结构,是我们使用python的基础,因此有必要理解它们的含义,我想这个和python一切皆对象的思想有关.python的数据结构更加灵活. 1. 列表[lists] 序列是Python中最基本的数据结构.序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推. Python有6个序列的内置类型,但最常见的是列表和元组. 序列都可以进行的操作包括索引,切片,加

python学习笔记(六):常用模块

一.模块.包 什么是模块? 模块实质上就是一个python文件,它是用来组织代码的,意思就是说把python代码写到里面,文件名就是模块的名称,test.py test就是模块名称. 什么是包? 包,package本质就是一个文件夹,和文件夹不一样的是它有一个__init__.py文件,包是从逻辑上来组织模块的,也就是说它是用来存放模块的,如果你想导入其他目录下的模块,那么这个目录必须是一个包才可以导入. 导入模块 1 2 3 4 5 import module #导入模块 from modul

Python学习笔记六(常用模块、面向对象基础)

一.random模块 import random print(random.random()) #0-1之间的小数 print(random.randint(1,5)) #1-5之间(包括1和5)的整数 print(random.randrange(1,5)) #1-5之间(包含1,不好包含5)的整数 print(random.choice(['a','b','c'])) #给定列表中任意元素 print(random.sample(['a','b','c','d'],2)) #给定列表中任意n

Python学习笔记六--文件和输入输出

6.1文件对象 所有Python对文件的操作都是基于对文件对象的操作.那么就从文件对象的创建说起.open()[file()]提供初始化输入输出的接口.open()成功打开文件时会返回一个文件对象. open()方法的语法: file_object=open(filename,access_mode,buffering) filename,表示要打开的文件名的字符串,可以是相对路径也可以是绝对路径. access_mode,表示打开方式.常见有'r'.'w'.'a',分别表示读模式,写模式,追加

python学习笔记六:字典

字典是python中唯一内建的映射类型. 特点: 没有特殊的顺序: 存储在特定的键(key)下,可以是数字.字符串甚至是元组 创建和使用字典 phonebook= {'Alice':'2341', 'Beth':'9102','Cecil':'3258'} a.由键-值组成,上述例子中,名字是键,电话号码是值 b.键与值用冒号(:)隔开 c.每一对键-值使用逗号(,)隔开 d.整个字典由一对大括号括起来 e.空字典:{} dict函数 >>> items = [('name','Gumb

Python学习笔记六:文件处理

一:打开文件 open(name,mode,[bufferSize]) name:文件路径 mode:文件打开方式 二:文件读取 read()方法:可以一次读取文件的全部内容,Python把内容读到内存,用一个str对象表示. readline([size]):如果不传参,一次默认读取一行.如果size<一行长度,则读取size个字节.如果size>一行长度,则只读取一行. readlines():一次读取io.DEFAULT_BUFFER_SIZE行,约586行,以字符串数组的形式返回读取结

Python学习笔记(六)再谈Python模块

Python程序包含多个模块文件,一个主体.顶层文件实现主要控制流程.调用组件和工具,其他模块文件则提供组件和工具,python自带了许多实用的模块称为标准链接库.模块是python中最高级别的程序组织单元,将代码和数据封装起来以便重用.每一个文件都是一个模块,并且可以通过"导入"来使用其他模块的变量(顶层定义的所有变量).模块被导入时就生成了一个模块对象.从抽象的角度看,模块的作用有: 1)代码重用-模块文件的代码可以永久保存,可以被多个客户端使用.任意的重新运行和重载 2)划分系统

python学习笔记六之模块下(基础篇)

shevle 模块 扩展pickle模块... 1.潜在的陷进 >>> import shelve>>> s = shelve.open("nb") >>> s['x'] = ['a','b','c'] >>> s['x'].append('d') >>> s['x'] ['a', 'b', 'c'] 解析:当你在shelve对象中查找元素的时候,这个对象都会根据已经存储的版本进行重新构建,当你将

Python学习笔记六:集合

集合 Set,去重,关系测试:交.并.差等:无序 list_1=set(list_1), type(list_1) list_2=set([xxxxx]) 交集:list_1.intersectin(list_2), list_1 & list_2 并集:list_1.union(list_2), list_1 | list_2 差集:list_1.diffrence(list_2), list_1 – list_2 子集:list_1.issubset(list_2) 父集:list_1.is

Head First Python学习笔记(六)

一.字典(dict) (1)字典将数据值与键关联.键,字典中的查找部分:值,字典中的数值部分. (2)字典的创建:方式一,myset={}:方式二,myset=dict(). (3)字典不会维持插入的顺序,字典通过关键字引用. 二.类 (1)每个类都有一个特殊方法,名为__init__(),控制如何初始化对象.类中的方法也用def定义,方法的第一个参数必须为self(指向对象本身,类似Java中的this)