configparser-xml-subprocess-shutil

configparser

1 # 注释1
2 ;  注释2
3  
4 [section1] # 节点
5 k1 = v1    # 值
6 k2:v2       # 值
7  
8 [section2] # 节点
9 k1 = v1    # 值

1.获取所有节点

import configparser

config = configparser.ConfigParser()
config.read('b.txt',encoding='utf-8')
ret = config.sections()
print(ret)

2.获取指定节点下所有的键值对

import configparser

config = configparser.ConfigParser()
config.read('b.txt',encoding='utf-8')
ret = config.items('section1')
print(ret)

3.获取指定节点下的所有的建

import configparser

config = configparser.ConfigParser()
config.read('b.txt',encoding='utf-8')
ret = config.options('section1')
print(ret)

4.获取指定节点下指定key

import configparser

config = configparser.ConfigParser()
config.read('b.txt',encoding='utf-8')

v = config.get('section1','k1')
#v1 = config.getint('section1','k1')
#v2 = config.getfloat('section1','k1')
#v3 = config.getboolean('section1','k1')

print(v)

5.检查 删除 添加节点

import configparser

config = configparser.ConfigParser()
config.read('b.txt',encoding='utf-8')

检查

has_sec = config.has_section('section1')
print(has_sec)

添加节点

config.add_section("SEC-1")
config.write(open('b.txt','w'))

删除节点

config.remove_section("SEC-1")
config.write(open('b.txt','w'))


6.检查 删除 设置指定组织内的键值对

import configparser

config = configparser.ConfigParser()
config.read('b.txt',encoding='utf-8')

检查

has_opt = config.has_option('section1','k1')
print(has_opt)

删除

config.remove_option('section1','k1')
config.write(open('b.txt','w'))

设置

config.set('section1','k10','123')
config.write(open('b.txt','w'))

xml

 1 <data>
 2     <country name="Liechtenstein">
 3         <rank updated="yes">2</rank>
 4         <year>2023</year>
 5         <gdppc>141100</gdppc>
 6         <neighbor direction="E" name="Austria" />
 7         <neighbor direction="W" name="Switzerland" />
 8     </country>
 9     <country name="Singapore">
10         <rank updated="yes">5</rank>
11         <year>2026</year>
12         <gdppc>59900</gdppc>
13         <neighbor direction="N" name="Malaysia" />
14     </country>
15     <country name="Panama">
16         <rank updated="yes">69</rank>
17         <year>2026</year>
18         <gdppc>13600</gdppc>
19         <neighbor direction="W" name="Costa Rica" />
20         <neighbor direction="E" name="Colombia" />
21     </country>
22 </data>

1.利用ElementTree.XML将字符串解析成xml对象

from xml.etree import ElementTree as ET

str_xml = open('name.xml','r').read()    #打开文件 读取xml内容

root = ET.XML(str_xml)     #获取xml文件根节点

2.利用ElementTree.parse将文件直接解析成xml对象

from xml.etree import ElementTree as ET

tree = ET.parse('name.xml')    #直接解析xml文件

root = tree.getroot()    #获取xml文件根节点

print(root.tag)    #获取顶层标签

3.遍历xml文档的第二层

for child in root:
print(child.tag, child.attrib)  # 第二层节点的标签和标签属性

for i in child:           #遍历xml文档的第三层
print(i.tag,i.text)     #第二层节点的标签名称和内容

修改设置删除

1.from xml.etree import ElementTree as ET

str_xml = open('name.xml','r').read()    #打开文件 读取xml内容

root = ET.XML(str_xml)  #将字符串解析成xml特殊对象 root代指xml文件的根节点

for node in root.iter('year'):      #循环所有的year节点
new_year = int(node.text) + 1    #将year节点中的内容自增一
node.text = str(new_year)

node.set('name', 'alex')   #设置属性
node.set('age', '18')
del node.attrib['name']   #删除属性

tree = ET.ElementTree(root)      
tree.write("new.xml",encoding='utf-8'    #保存文件

2.from xml.etree import ElementTree as ET

tree = ET.parse("name.xml")  #直接解析xml文

root = tree.getroot()  #获取xml文件的根节点

for node in root.iter('year'):  #循环所有的year节点
new_year = int(node.text) + 1  #将year节点中的内容自增一
node.text = str(new_year)

node.set('name','alex')  #设置属性
node.set('age','18')

del node.attrib['name']  #删除属性

tree.write("new.xml",encoding='utf-8') #保存文件

3.from xml.etree import ElementTree as ET

str_xml = open('name.xml','r').read()
root = ET.XML(str_xml)

for country in root.findall('country'):    #遍历data下的所有country节点
rank = int(country.find('rank').text)  #获取每一个country节点下rank节点的内容
if rank > 50:
root.remove(country)   #删除指定country节点

tree = ET.ElementTree(root)
tree.write("newnew.xml",encoding='utf-8'

from xml.etree import ElementTree as ET
tree = ET.parse('name.xml')
root = tree.getroot()

4.for country in root.findall('counrty'):
rank = int(country.find('rank').text)
if rank > 50:
root.remove(country)

tree.write('new.xml',encoding='utf-8')

4.创建XML文档

1.from xml.etree import ElementTree as ET

#创建节点
root = ET.Element('famliy')

#创建节点儿子
son1 = ET.Element('son',{'name':'erzi1'})
son2 = ET.Element('son',{'name':'erzi2'})

#创建孙子
grandson1 = ET.Element('grandson',{'name':'erzi11'})
grandson2 = ET.Element('randson',{'name':'erzi12'})

#把添加到很节点中
root.append(son1)
root.append(son2)

tree = ET.ElementTree(root)
tree.write('text.xml',encoding='utf-8',short_empty_elements=False)

2.fom xml.etree import ElementTree as ET

#创建根节点
root = ET.Element('famliy')

# 创建大儿子
son1 = root.makeelement('son',{'name':'erzi1'})
# 创建小儿子
son2 = root.makeelement('son',{'name':'erzi2'})

# 在大儿子中创建两个孙子
grandson1 = son1.makeelement('grangdson',{'name':'erzi11'})
grandson2 = son1.makeelement('grandson',{'name':'erzi12'})

son1.append(grandson1)
son1.append(grandson2)

# 把儿子添加到根节点中
root.append(son1)
root.append(son2)

tree = ET.ElementTree(root)
tree.write('test1.xml',encoding='utf-8',short_empty_elements=False)

3.from xml.etree import ElementTree as ET

# 创建根节点
root = ET.Element('famliy')

# 创建节点大儿子
son1 = ET.SubElement(root,'son',attrib={'name':'erzi1'})
# 创建小儿子
son2 = ET.SubElement(root,'son',attrib={'name':'erzi2'})

# 在大儿子中创建一个孙子
grandson1 = ET.SubElement(son1,"age",attrib={'name':'erzi11'})
grandson1.text = "孙子"

#生成文档对象

et = ET.ElementTree(root) 
et.write('test2.xml',encoding='utf-8',xml_declaration=True,short_empty_elements=False)

5.创建缩进xml文件

from xml.etree import ElementTree as ET
from xml.dom import minidom

def prettify(elem):
#将节点转换成字符串 并添加缩进
rough_string = ET.tostring(elem,'utf-8')  #转换成字符串
reparsed = minidom.parseString(rough_string)  #分割
return reparsed.toprettyxml(indent=' ')  #加换行

#创建根节点
root = ET.Element('famliy')

# 创建大儿子
son1 = root.makeelement('son',{'name':'erzi1'})
# 创建小儿子
son2 = root.makeelement('son',{'name':'erzi2'})

# 在大儿子中创建两个孙子

grandson1 = son1.makeelement('grandson',{'name':'erzi11'})
grandson2 = son1.makeelement('rangdson',{'name':'erzi12'})

son1.append(grandson1)
son1.append(grandson2)

# 把儿子添加到根节点中
root.append(son1)
root.append(son1)

raw_str = prettify(root) #换行

f = open('test66.xml','w',encoding='utf-8')
f.write(raw_str)
f.close()

subprocess

call 

执行命令,返回状态码

import subprocess

ret = subprocess.call(["ls", "-l"], shell=False)
ret = subprocess.call("ls -l", shell=True)

check_call  

执行命令,如果执行状态码是 0 ,则返回0,否则抛异常

subprocess.check_call(["ls", "-l"])
subprocess.check_call("exit 1", shell=True)

check_output

执行命令,如果状态码是 0 ,则返回执行结果,否则抛异常

subprocess.check_output(["echo", "Hello World!"])
subprocess.check_output("exit 1", shell=True)

subprocess.Popen(...)

用于执行复杂的系统命令

import subprocess
ret1 = subprocess.Popen(["mkdir","t1"])
ret2 = subprocess.Popen("mkdir t2", shell=True)

import subprocess

obj = subprocess.Popen("mkdir t3", shell=True, cwd='/home/dev',)

 1 1.
 2 import subprocess
 3 
 4 obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
 5 obj.stdin.write("print(1)
")
 6 obj.stdin.write("print(2)")
 7 obj.stdin.close()
 8 
 9 cmd_out = obj.stdout.read()
10 obj.stdout.close()
11 cmd_error = obj.stderr.read()
12 obj.stderr.close()
13 
14 print(cmd_out)
15 print(cmd_error)
16 
17 2.
18 import subprocess
19 
20 obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
21 obj.stdin.write("print(1)
")
22 obj.stdin.write("print(2)")
23 
24 out_error_list = obj.communicate()
25 print(out_error_list)
26 
27 
28 3.
29 import subprocess
30 
31 obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
32 out_error_list = obj.communicate('print("hello")')
33 print(out_error_list)

shutil

高级的 文件、文件夹、压缩包 处理模块

import shutil

ret = shutil.make_archive('testi', 'gztar', root_dir='/root/')


把文件压缩到/mnt/下面

ret1 = shutil.make_archive("/mnt/test2", "zip", root_dir="/root/han") 

zipfile 

压缩

import zipfile

z = zipfile.ZipFile("laxi.zip",'w')
z.write('a.log')
z.write("b.log")
z.close()

解压

z = zipfile.ZipFile('laxi.zip','r')
z.extractall()
z.close() 

解压指定文件
z = zipfile.ZipFile('laxi.zip','r')
z.extract("a.log")
z.close()

tarfile

import tarfile
tar = tarfile.open("your.tar","w")
tar.add('/root/han/bbs2.log', arcname='bbs2.log')
tar.add('/root/han/cmddb.log', arcname='cmddb.log')
tar.close()

 解压

import tarfile

tar = tarfile.open('your.tar','r')
tar.extractall() # 可设置解压地址
tar.close()

解压指定文件
tar = tarfile.open('your.tar','r')
obj = tar.getmember("cmddb.log")
tar.extract(obj)
tar.close()

 

原文地址:https://www.cnblogs.com/hanwei999/p/6280314.html