此文章是对上节文章模块的补充
一,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
|
导入模块 别名ETimport 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")
#删除nodefor 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, flagsshutil.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()复制代码 |