一、 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. 解题(GeLeiMa -生成格雷码)

    题目描述 在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同, 则称这种编码为格雷码(Gray Code),请编写一个函数,使用递归的方法生成N位的格雷码. 给定一个整数n,请返回n位的格雷码 ...

  2. JAVA企业级应用TOMCAT实战

    1. Tomcat简介 原文链接:https://blog.oldboyedu.com/java-tomcat/ Tomcat是Apache软件基金会(Apache Software Foundati ...

  3. sh 了解

    shell 脚本中 `dirname $0` 在命令行状态下单纯的执行时没有意义的,因为他返回当前路径的“.”. 在脚本中他返回这个脚本文件放置的目录,并可以根据这个目录来定位所要运行的程序的相对位置 ...

  4. oracle优化技巧及实例(总结)

    1.关于exists和in in是循环的方式,在内存中处理, exists是执行数据库查询, select tpd.personaccountid,sum(nvl(tpd.CREDIT_SUM, 0) ...

  5. Windows云服务器购买

    一直点击下一步 支付

  6. 646. Maximum Length of Pair Chain 最长的链条长度

    [抄题]: You are given n pairs of numbers. In every pair, the first number is always smaller than the s ...

  7. Web前端(整理不好,自己未学)

    1.公司招聘信息 (1)小公司 (2)腾讯 ①社会招聘 ②校园招聘 (3)百度 ①社会招聘 ②实习 ③校园招聘 2.岗位要求 开发经验,良好的编程习惯,学习能力,至少二个项目开发设计,具备需求功能模块 ...

  8. 彻底关闭win10后台同步数据(转自技术社区)

    设置隐私里面关闭所有同步数据选项 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\将下面子项属性修改 OneSyncSvc的start属相修改 ...

  9. vuex 中五大核心以及map函数的应用

    什么是vuex? 我理解的vuex就是数据和状态的管理 如果在模块化构建系统中,请确保在开头调用了 Vue.use(Vuex) 五大核心: const store = new Vuex.Store({ ...

  10. STARTTLS is required but host does not support STARTTLS

    Spring boot 邮件系统的错误,需要修改配置的文件yml.如果是企业邮箱的话就需要进行这个配置: spring: mail: host: mail.ccds.com username: inf ...