PYTHON 的 YAML 和PKL

本文介绍了Python中YAML和PKL两种数据序列化方法的特点和应用。详细讲解了YAML的语法及其在Python中的实现PyYAML,包括读写YAML文件的操作。此外,还介绍了Python的pickle模块的基本用法,包括数据的序列化和反序列化。
摘要由CSDN通过智能技术生成

PYTHON 的 YAML 和PKL

要用到,于是在网上抄了几段:

YAML的可读性好。

YAML和脚本语言的交互性好。

YAML使用实现语言的数据类型。

YAML有一个一致的信息模型。

YAML易于实现。

上面5条也就是XML不足的地方。同时,YAML也有XML的下列优点:

YAML可以基于流来处理;

YAML表达能力强,扩展性好。

总之,YAML试图用一种比XML更敏捷的方式,来完成XML所完成的任务。

更多的内容及规范参见http://www.yaml.org

语法

http://zh.wikipedia.org/wiki/YAML

Structure通过空格来展示。Sequence里的项用"-"来代表,Map里的键值对用":"分隔.

这几乎就是所有的语法了.

注意在YAML中,字串不一定要用双引号标示。另外,在缩排中空白字符的数目并不是非常重要,只要相同阶层的元素左侧对齐就可以了(不过不能使用TAB字符)。

比如……

一般YAML文件扩展名为.yaml。比如:John.yaml

如何写yaml?

name: Tom Smith

age: 37

spouse:

name: Jane Smith

age: 25

children:

- name: Jimmy Smith

age: 15

- name1: Jenny Smith

age1: 12

John今年37岁,有一个幸福的四口之家。两个孩子Jimmy 和Jenny活泼可爱。妻子Jane年轻美貌。

如果深入研究的话还可能发现一些社会问题。

可见YAML的可读性是不错。

http://pyyaml.org/wiki/PyYAMLDocumentation

yaml在python上的具体实现:PyYaml

将yaml写成配置脚本test.yaml ,以下介绍如何读写yaml配置。

使用python的yaml库PyYAML。http://pyyaml.org/

安装到python lib下后就可以正常使用了。

或者在C:/python 下,用命令行 pip install pyyaml也行

Yaml代码/d:/tree.yml./


#treeformat

treeroot:

branch1:

name:Node1

branch1-1:

name:Node1-1

branch2:

name:Node2

branch2-1:

name:Node2-1

Python代码


importyaml

f=open('d:/tree.yml')

dataMap=yaml.load(f)

f.close()

#下面是 printdataMap的结果

{'treeroot':{'branch1':{'branch1-1':{'name':'Node1-1'},

'name':'Node1'},

'branch2':{'branch2-1':{'name':'Node2-1'},

'name':'Node2'}}}

Python代码


importyaml

f=open('d:/newtree.yaml',"w")

yaml.dump(dataMap,f)

f.close()

#这样就会在d盘下生成一个新的newtree.yaml 文件

再说一下PKL

python的pickle模块实现了基本的数据序列和反序列化。通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储;通过pickle模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象。

基本接口:

pickle.dump(obj, file, [,protocol])

注解:将对象obj保存到文件file中去。

protocol为序列化使用的协议版本,0:ASCII协议,所序列化的对象使用可打印的ASCII码表示;1:老式的二进制协议;2:2.3版本引入的新二进制协议,较以前的更高效。其中协议0和1兼容老版本的python。protocol默认值为0。

file:对象保存到的类文件对象。file必须有write()接口,file可以是一个以'w'方式打开的文件或者一个StringIO对象或者其他任何实现write()接口的对象。如果protocol>=1,文件对象需要是二进制模式打开的。

pickle.load(file)

注解:从file中读取一个字符串,并将它重构为原来的python对象。

file:类文件对象,有read()和readline()接口。

import pickle

data1 = {'a': [1, 2.0, 3, 8],

'b': ('string', 'Unicode string'),

'c': None}

selfref_list = [1, 2, 3]

#selfref_list.append(selfref_list)

output = open('D:/data.pkl', 'wb')

# Pickle dictionary using protocol 0.

pickle.dump(data1, output)

# Pickle the list using the highest protocol available.

pickle.dump(selfref_list, output, -1)

output.close()

反序列化

import pprint, pickle

pkl_file = open('D:/data.pkl', 'rb')

data1 = pickle.load(pkl_file)

pprint.pprint(data1)

data2 = pickle.load(pkl_file)

pprint.pprint(data2)

pkl_file.close()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值