天天看点

python内置模块(三)

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

            new_year = int(node.text) + 1

            node.text = str(new_year)

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

        tree.write("test.xml")

删除xml内容

        #删除node

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

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

           if rank > 50:

             root.remove(country)

        tree.write('test.xml')

创建xml文档

        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)

   从配置文件中读出内容:

        print(config.sections())

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

        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.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')