7.python模块补充
此文章是对上节文章模块的补充
一,xml模块
xml是实现不同语言或程序之间进行数据交换的协议,可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。xml的格式如下,就是通过<>节点来区别数据结构的:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
<?xml version = "1.0" ?> <data> <country name = "Liechtenstein" > <rank updated = "yes" > 2 < / rank> <year> 2008 < / year> <gdppc> 141100 < / gdppc> <neighbor name = "Austria" direction = "E" / > <neighbor name = "Switzerland" direction = "W" / > < / country> <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> |
python模块解析xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
导入模块 别名ET 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文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
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 = '33' name2 = ET.SubElement(new_xml, "name" ,attrib={ "enrolled" : "no" }) age = ET.SubElement(name2, "age" ) age.text = '19' et = ET.ElementTree(new_xml) #生成文档对象 et.write( "test.xml" , encoding= "utf-8" ,xml_declaration=True) ET.dump(new_xml) #打印生成的格式 |
修改或者删除
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
import xml.etree.ElementTree as ET tree = ET.parse( "xmltest.xml" ) root = tree.getroot() #修改 for node in root. iter ( 'year' ): new_year = int (node.text) + 1 node.text = str (new_year) node. set ( "updated" , "yes" ) tree.write( "xmltest.xml" ) #删除node for country in root.findall( 'country' ): rank = int (country.find( 'rank' ).text) if rank > 50 : root.remove(country) tree.write( 'output.xml' ) |
二、shutil
高级的 文件、文件夹、压缩包 处理模块
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
import shutil #将文件内容拷贝到另一个文件中,可以部分内容 with open( 'log.log' , 'r' ) as file1,open( 'test_con' , 'w' ) as file2: shutil.copyfileobj( 'file1' , 'file2' ) #拷贝文件 shutil.copyfile( 'log.log' , 'log' ) #拷贝文件权限 shutil.copymode( 'log.log' , 'log' ) shutil.copystat(src, dst) #拷贝状态的信息,包括:mode bits, atime, mtime, flags shutil.copy(src, dst) #拷贝文件和权限 shutil.copy2(src, dst) #拷贝文件和状态信息 |
1
2
3
4
5
6
7
8
9
|
#将 /opt/test 下的文件打包放置当前程序目录 import shutil ret = shutil.make_archive( "wwwwwwwwww" , 'gztar' , root_dir= '/opt/test' ) #将 /opt/test 下的文件打包放置 /root/目录 import shutil ret = shutil.make_archive( "/root" , 'gztar' , root_dir= '/opt/test' ) |
shutil 对压缩包的处理是调用 ZipFile 和 TarFile 两个模块来进行的,详细:
1
2
3
4
5
6
7
8
9
10
11
12
|
import zipfile # 压缩 z = zipfile.ZipFile( 'laxi.zip' , 'w' ) z.write( 'a.log' ) z.write( 'data.data' ) z.close() # 解压 z = zipfile.ZipFile( 'laxi.zip' , 'r' ) z.extractall() z.close() |
1
2
3
4
5
6
7
8
9
10
11
12
13
|
import tarfile # 压缩 tar = tarfile.open( 'your.tar' , 'w' ) tar.add( '/Users/wupeiqi/PycharmProjects/bbs2.zip' , arcname= 'bbs2.zip' ) tar.add( '/Users/wupeiqi/PycharmProjects/cmdb.zip' , arcname= 'cmdb.zip' ) tar.close() # 解压 tar = tarfile.open( 'your.tar' , 'r' ) tar.extractall() # 可设置解压地址 tar.close() 复制代码 |