一、 shelve模块

  • json和pickle模块的序列化和反序列化处理,他们有一个不足是在python 3中不能多次dump和load,shelve模块则可以规避这个问题。
  • shelve模块是一个简单的key,values将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式,是pickle 更上一层的封装。
  • shelve模块比pickle模块简单,只有一个open函数,返回类似字典的对象
  • 可读可写
  • key必须为字符串,而值可以是python所支持的数据类型

#持久化储存

import shelve
f = shelve.open('shelve_test')
f['stu1_info'] = {'name': 'alex', 'age': ''}
f['stu2_info'] = {'name': 'xxxx', 'age': ''}
f['stu3_info'] = {'name': 'rrrr', 'age': ''}
f.close()
#直接对文件句柄[key]操作,就可以存入数据
#且重要的是它还会直接在打开的当前目录生成三个文件:
shelve_test.bak
shelve_test.dat
shelve_test.dir 其中shelve_test.dat 存储的就是b字节数据类型的数据,
bak和dir后缀的就可能是和数据库相关的设计缓存之类的东西了。
注:文件生成后,我们可以将前面的这一段生成shelve_test的代码先行注释掉,不影响下面的继续测试操作。

#解析文件内容

import shelve
f = shelve.open('shelve_test')
data = f['stu1_info']
f.close()
print(type(data), data) #执行结果:
<class 'dict'> {'name': 'alex', 'age': ''}
#通过get来解析文件内容
import shelve
f = shelve.open('shelve_test')
date = f.get('stu1_info')['age']
f.close()
print(date) #执行结果:
18

二、xml模块

  • xml,可扩展标记语言,用来传输和储存数据
  • xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单

1. xml的格式如下,是通过<>节点来区别数据结构

(xml数据:标签语言(文档树)

<data>
<country name="Singapore">
<rank updated="yes">5</rank>
<year updated="yes">2013</year>
<gdppc>59900</gdppc>
<neighbor direction="N" name="Malaysia" />
</country>
<country name="China">
<rank updated="yes">1</rank>
<year updated="yes">2016</year>
<gdppc>1051100</gdppc>
<neighbor direction="E" name="Korea" />
<neighbor direction="W" name="Japan" />
</country>
</data>

2. xml中节点Element类的函数

tag                   当前节点标签名
attrib 当前节点属性
text 当前节点内容
append 添加一个子节点
clear 清空节点
extend 为当前节点添加 n 个子节点
find 获取第一个寻找到的子节点
findall 获取所有的子节点
findtext 获取第一个寻找到的子节点的内容
get 获取当前节点的属性
insert 在当前节点创建子节点,然后插入指定位置
items 获取当前节点的所有属性,和字典中的items一样,内容都是健值对
iter 在根据节点名称寻找所有指定的节点,并返回一个迭代器
iterfind 获取所有指定的节点,并放在一个迭代器中
itertext 在子孙中根据节点名称寻找所有指定的节点的内容,并返回一个迭代器
keys 获取当前节点的所有属性的 key
makeelement 创建一个新节点
remove 删除某个节点
set 设置当前节点属性

3. xml解析(针对1中的xml文件进行操作)

#ElementTree.parse("file_path")函数
import xml.etree.ElementTree as ET
tree = ET.parse('output') #打开xml文件并且解析,返回一个xml.etree.ElementTree.ElementTree对象
root = tree.getroot() #获取xml的根节点
print(root.tag) #调用tag属性 #执行结果:data
import xml.etree.ElementTree as ET
tree = ET.parse('output')
root = tree.getroot()
for i in root: #对根节点进行遍历,遍历结果是地址,即其子对象,调用其tag属性
print(i.tag) #执行结果:
country
country
country
#对第三级子节点进行遍历,并调用其tag属性
import xml.etree.ElementTree as ET
tree = ET.parse('output')
root = tree.getroot()
for i in root:
for j in i:
print(j.tag)

#执行结果:

rank
year
gdppc
neighbor
neighbor
rank
year
gdppc
neighbor
rank
year
gdppc
neighbor
neighbor
#调用attrib属性(打印标签对应的属性内容)
import xml.etree.ElementTree as ET
tree = ET.parse('output')
root = tree.getroot()
for i in root:
print(i.attrib) #执行结果:
{'name': 'Liechtenstein'}
{'name': 'Singapore'}
{'name': 'China'}
#调用text属性(打印标签包裹的内容)
import xml.etree.ElementTree as ET
tree = ET.parse('output')
root = tree.getroot()
for i in root:
for j in i:
print(j.text)

#执行结果:

#执行结果:
21
2010
141100
None
None
5
2013
59900
None
1
2016
1051100
None
None
#只遍历某一节点
import xml.etree.ElementTree as ET
tree = ET.parse('output')
root = tree.getroot()
for note in root.iter("rank"):
print(note.tag,note.attrib,note.text) #执行结果:
rank {'updated': 'yes'} 21
rank {'updated': 'yes'} 5
rank {'updated': 'yes'} 1
#删除某一节点(删除排名大于20的城市的所有内容)
import xml.etree.ElementTree as ET
tree = ET.parse('output')
root = tree.getroot()
for country in root.findall('country'):
rank = int(country.find('rank').text)
if rank > 20:
root.remove(country)
tree.write('output') #操作完记得进行写操作

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 = 'female' name2 = ET.SubElement(new_xml, 'name',attrib={'enrolled':'yes'})
age = ET.SubElement(name2, 'age')
sex =ET.SubElement(name2, 'sex')
age.text = '' et = ET.ElementTree(new_xml) #生成文档对象
et.write('test.xml', encoding = 'utf-8', xml_declaration=True)
ET.dump(new_xml) #打印生成格式 #执行结果:(没有缩进)
<namelist><name enrolled="yes"><age checked="no" /><sex>female</sex></name><name enrolled="yes"><age>16</age><sex /></name></namelist>

5. 增加缩进

import xml.etree.ElementTree as ET
from xml.dom import minidom def prettify(elem):
"""
将节点转换成字符串,并添加缩进
"""
#返回该对象的字符串表示
rough_string = ET.tostring(elem, 'utf-8')
print(type(rough_string))
#从xml字符串得到dom对象
reparsed = minidom.parseString(rough_string)
print(type(reparsed))
return reparsed.toprettyxml(indent="\t") 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 = 'female' name2 = ET.SubElement(new_xml, 'name',attrib={'enrolled':'yes'})
age = ET.SubElement(name2, 'age')
sex =ET.SubElement(name2, 'sex')
age.text = '' newStr=prettify(new_xml) file = open('test.xml', 'w',encoding = 'utf-8')
file.write(newStr)
file.close()
ET.dump(new_xml)

python(32)——【shelve模块】【xml模块】的更多相关文章

  1. 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 ...

  2. Python常用内置模块之xml模块

    xml即可扩展标记语言,它可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言.从结构上,很像HTML超文本标记语言.但他们被设计的目的是不同的,超文本标记语言被设计用来显示 ...

  3. python之shelve、xml、configparser模块

    一.shelve模块 shelve模块比pickle模块简单,只有一个open函数,返回类似字典的对象,可读可写;key必须为字符串,而值可以是python所支持的数据类型 import shelve ...

  4. s14 第5天 时间模块 随机模块 String模块 shutil模块(文件操作) 文件压缩(zipfile和tarfile)shelve模块 XML模块 ConfigParser配置文件操作模块 hashlib散列模块 Subprocess模块(调用shell) logging模块 正则表达式模块 r字符串和转译

    时间模块 time datatime time.clock(2.7) time.process_time(3.3) 测量处理器运算时间,不包括sleep时间 time.altzone 返回与UTC时间 ...

  5. 常用模块:re ,shelve与xml模块

    一 shelve模块: shelve模块比pickle模块简单,只有一个open函数,所以使用完之后要使用f.close关闭文件.返回类似字典的对象,可读可写;key必须为字符串,而值可以是pytho ...

  6. python笔记7 logging模块 hashlib模块 异常处理 datetime模块 shutil模块 xml模块(了解)

    logging模块 日志就是记录一些信息,方便查询或者辅助开发 记录文件,显示屏幕 低配日志, 只能写入文件或者屏幕输出 屏幕输出 import logging logging.debug('调试模式 ...

  7. python configparse模块&xml模块

    configparse模块 用于生成和修改常见配置文档,当前模块的名称在 python 3.x 版本中变更为 configparser. [DEFAULT] serveraliveinterval = ...

  8. shelve模块 xml模块

    # import shelve# f=shelve.open('db.shl')# # f['stu1']={'name':'alex1','age':28}# # f['stu2']={'name' ...

  9. python运维开发(六)----模块续

    内容目录 反射 模块 os模块 sys模块 md5加密模块 re正则匹配模块 configparse模块 xml模块 shutil模块 subprocess模块 反射 利用字符串的形式去对象(模块)中 ...

  10. logging模块、shutil模块、subprocess模块、xml模块

    logging模块 shutil模块 subprocess模块 xml模块 logging模块 函数式简单配置 import logging logging.debug('debug message' ...

随机推荐

  1. grabcut mask

    #include "opencv2/opencv.hpp" using namespace cv; void main() { Mat src = imread("E:\ ...

  2. c++ 面试题(C/C++/STL)

    1,智能指针:auto_ptr(c++11 已经弃用),unique_ptr(用于取代 auto_ptr),  shared_ptr,  weak_ptr http://www.cnblogs.com ...

  3. 我的java学习之旅--一些基础

    (因为我粗略学过C,C++,Python,了解过他们的一些语法,所以为了使得java的入门更为顺畅,便会忽略一些和C语法相类似的地方,着重点明一些java自己的特色之处.也减轻一下自己写文字的负担.) ...

  4. 文字创作类App分享-简书

    今天我用Mockplus做了一套简书App的原型,这是一款文字创作类的App,用户通过写文.点赞等互动行为,提高自己在社区的影响力,打造个人品牌.我运用了Mockplus基础组件.交互组件.移动组件等 ...

  5. Eclipse GBK批量转UTF-8插件(转)

    最近需要把Android项目转Android Studio,由于之前是eclipse开发,而且坑爹的是编码还是GBK的,转到Android Studio中文都是乱码,如果一个文件一个文件ctrl+c的 ...

  6. Django Model模型的实战操作笔记

    Model模型的实战操作笔记 1. 创建数据库和表 进入MySQL数据库创建数据库:mytest 进入数据库创建数据表:mytest_users CREATE TABLE `mytest_users` ...

  7. 【Git】 GitLab配置优化及汉化

    GitLab配置 1.修改GitLab绑定的域名 a.修改/etc/gitlab/gitlab.rb配置文件,修改成自己的域名 external_url 'http://gitlab.example. ...

  8. 数据库-mysql语句-查-WEB服务器

    (1)MySQL中的查询 (2)WEB服务器 Order:  订单.排序 Set:设置.集合 Table:表.桌子 1.MySQL中的简单查询 —— 查询结果的排序 示例:查询出所有员工信息,要求按工 ...

  9. SAS 逻辑库

    SAS逻辑库 SAS逻辑库是一个或多个SAS文件的集合,用于组织.查找和管理 SAS文件.SAS逻辑库管理的SAS文件包括SAS数据集.SAS目录.已编 译的SAS程序,以及多维数据库文件等. 1.逻 ...

  10. 2019.02.28 bzoj4199: [Noi2015]品酒大会(sam+线段树)

    传送门 题意:给一个串,每个位置有一个权值,当S[s...s+len−1]=S[t...t+len−1]&&S[s...s+len]̸=S[t..t+len]S[s...s+len-1 ...