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()
复制代码








来自为知笔记(Wiz)


你可能感兴趣的:(7.python模块补充)