----------------------------接 python内置模块(二)---------------------------

八、 shelve模块

shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式他只有一个函数就是open(),这个函数接收一个参数就是文件名,然后返回一个shelf

对象,你可以用他来存储东西,就可以简单的把他当作一个字典,当你存储完毕的时候,就调用close

函数来关闭。

>>> import shelve

>>> sfile = shelve.open('shelve_test') # 打开一个文件

>>> sfile['k1'] = [] # 持久化存储列表

>>> sfile['k1']

[]

>>> sfile.close() # 文件关闭

九、 xml处理模块

xml是实现不同语言或程序之间进行数据交换的协议,xml通过<>节点来区别数据结构的:

<?xml version="1.0"?>

< data >
< 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文档

import xml.etree.ElementTree as ET

tree = ET.parse("test.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)

修改xml文档

import xml.etree.ElementTree as ET

tree = ET.parse("test.xml")

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

new_year = int(node.text) + 1

node.text = str(new_year)

node.set("updated","yes")


tree.write("test.xml")

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

print(node.tag,node.text)

删除xml内容

#删除node

import xml.etree.ElementTree as ET

tree = ET.parse("test.xml")

for country in root.findall('country'):

rank = int(country.find('rank').text)

if rank > 50:

root.remove(country)


tree.write('test.xml')

for child in root:

print(child.tag, child.attrib)

for i in child:

print(i.tag,i.text)

创建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")

age.text = '33'

sex.text = 'F'

name2 = ET.SubElement(new_xml,"name",attrib={"enrolled":"no"})

age = ET.SubElement(name2,"age")

sex = ET.SubElement(name2,"sex")

age.text = '19'

sex.text = 'M'


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">33</age>
                <sex>F</sex>
            </name>
            <name enrolled="no">
                <age>19</age>
                <sex>M</sex>
            </name>
        </namelist>

十、 ConfigParser模块

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

常见软件配置文档格式如下:

[DEFAULT]

ServerAliveInterval = 45
Compression = yes
CompressionLevel = 9
ForwardX11 = yes
[bitbucket.org]
User = hg
[topsecret.server.com]
Port = 50022
ForwardX11 = no

生成配置文件方法:

import configparser

config = configparser.ConfigParser()


config["DEFAULT"] = {}

config["DEFAULT"]['ServerAliveInterval']= '45'

config["DEFAULT"]['Compression'] = 'yes'

config["DEFAULT"]['CompressionLevel'] = '9'

config['DEFAULT']['ForwardX11'] = 'yes'

config['bitbucket.org'] = {}

config['bitbucket.org']['User'] = 'hg'

config['topsecret.server.com'] = {}

config['topsecret.server.com']['Host Port'] = '50022'

config['topsecret.server.com']['ForwardX11'] = 'no'


with open('example.ini', 'w') as configfile:

config.write(configfile)


从配置文件中读出内容:

import configparser

config = configparser.ConfigParser()

print(config.sections())

print(config.read('example.ini')) //想要读取配置文件中内容需要先执行此操作将内容读进内存;

print(config.sections())

print(config['bitbucket.org']['User'])

for key in config['DEFAULT']:

print(key)

结果是:


[]

['example.ini']

['bitbucket.org', 'topsecret.server.com']

hg

serveraliveinterval

compression

compressionlevel

forwardx11

configparser增删改查语法

import configparser

config = configparser.ConfigParser()

config.read('example.ini')


# ********* 读 *********

#secs = config.sections()

#print(secs)

#options = config.options('bitbucket.org') // 获取sections下所有key值

#print(options)


#item_list = config.items('bitbucket.org') // 获取sections下所有items

#print(item_list)


#val = config.get('bitbucket.org','user') // 在sections 下找到某key值

#val = config.getint('bitbucket.org','compressionlevel') // 先get 后int,即将int类型的

字符串转换成int类型

#print(val)


# ********** 改写 ***********

#sec = config.remove_section('bitbucket.org')

#config.write(open('new_example.ini', "w"))


#secs = config.has_section('bitbucket')

#config.add_section('bitbucket')

#config.write(open('example.cfg', "w"))



#config.set('bitbucket.org','user','shuoming')

#config.write(open('new_example.cfg', "w"))


#config.remove_option('bitbucket.org','user')

#config.write(open('new_example.cfg', "w"))




----------------------------接 内置模块(四)---------------------------