1、模块
1、configparser
conf文件 [wzc] haha = 123 [zzz] heihei = 333 程序文件 import configparser config=configparser.ConfigParser() config.read('conf',encoding='utf-8') ret=config.sections() print(ret) config1=configparser.ConfigParser() config1.read('conf',encoding='utf-8') ret1=config.items('wzc') print(ret1) config2=configparser.ConfigParser() config2.read('conf',encoding='utf-8') value=config2.options('wzc') print(value) config3=configparser.ConfigParser() config3.read('conf',encoding='utf-8') v=config3.get('wzc','haha') v1=config3.getint('wzc','haha') #v2=config3.getfloat() #v3=config3.getboolean() print(v,type(v)) print(v1,type(v1)) has_sec=config3.has_section('wzc') print(has_sec) config3.remove_section('zzz') config3.write(open('conf','w')) config3.add_section('zzz') config3.write(open('conf','w')) has_opt=config3.has_option('zzz','heihei') print(has_opt) config3.remove_option('zzz','heihei') config3.write(open('conf','w')) config3.set('zzz','heihei','333') config3.write(open('conf','w'))
结果:
['wzc', 'zzz'] [('haha', '123')] ['haha'] 123 <class 'str'> 123 <class 'int'> True False
configparser模块需要注意的地方
模块胡IBA数字和字符串都当做字符串来处理,如果非要输入数字,可以使用getint来进行输入,这样得到的就含有数字。
xml模块
xml文件
<data> <country name="Liechtenstein"> <rank updated="yes">2</rank> <year>2023</year> <gdppc>141100</gdppc> <neighbor direction="E" name="Austria" /> <neighbor direction="W" name="Switzerland" /> </country> <country name="Singapore"> <rank updated="yes">5</rank> <year>2026</year> <gdppc>59900</gdppc> <neighbor direction="N" name="Malaysia" /> </country> <country name="Panama"> <rank updated="yes">69</rank> <year>2026</year> <gdppc>13600</gdppc> <neighbor direction="W" name="Costa Rica" /> <neighbor direction="E" name="Colombia" /> </country> </data>
xml模块,我们主要用到elementTree这个功能,每一个节点都是一个element对象
我们在使用的时候又两种方法,一种是直接使用element,还有一种是elementTree然后再使用element。
但是这两者之前还是有区别的,区别就是elementTree上面,为了我们把Xml配置读取以后,还是要进行写入的,如果不使用elementTree的话我们无法进行写入文件的操作
from xml.etree import ElementTree as ET tree=ET.parse('xml') root=tree.getroot() #print(root) for child in root: #print(child.tag,child.attrib) for cchild in child: print(cchild.tag,child.attrib)
结果:
rank {'name': 'Liechtenstein'} year {'name': 'Liechtenstein'} gdppc {'name': 'Liechtenstein'} neighbor {'name': 'Liechtenstein'} neighbor {'name': 'Liechtenstein'} rank {'name': 'Singapore'} year {'name': 'Singapore'} gdppc {'name': 'Singapore'} neighbor {'name': 'Singapore'} rank {'name': 'Panama'} year {'name': 'Panama'} gdppc {'name': 'Panama'} neighbor {'name': 'Panama'} neighbor {'name': 'Panama'}
newxml.xml
<data> <country name="Liechtenstein"> <rank updated="yes">2</rank> <year age="16">2024</year> <gdppc>141100</gdppc> <neighbor direction="E" name="Austria" /> <neighbor direction="W" name="Switzerland" /> </country> <country name="Singapore"> <rank updated="yes">5</rank> <year age="16">2027</year> <gdppc>59900</gdppc> <neighbor direction="N" name="Malaysia" /> </country> <country name="Panama"> <rank updated="yes">69</rank> <year age="16">2027</year> <gdppc>13600</gdppc> <neighbor direction="W" name="Costa Rica" /> <neighbor direction="E" name="Colombia" /> </country> </data>
from xml.etree import ElementTree as ET set_xml=open('xml').read() root=ET.XML(set_xml) print(root) for node in root.iter('year'): print(node) new_year=int(node.text) + 1 node.text=str(new_year) node.set('name','wzc') node.set('age','16') del node.attrib['name'] tree=ET.ElementTree(root) tree.write('newxml.xml',encoding='utf-8')
结果:
<Element 'data' at 0x101121138> <Element 'year' at 0x10172f048> <Element 'year' at 0x10172f228> <Element 'year' at 0x10172f3b8>
from xml.etree import ElementTree as ET root=ET.Element('home') son1=ET.Element('son',{'name':'son1'}) son2=ET.Element('son',{'name':'son2'}) grandson1=ET.Element('grandson',{'name':'grandson1'}) grandson2=ET.Element('grandson',{'name':'grandson2'}) son1.append(grandson1) son2.append(grandson2) root.append(son1) root.append(son2) tree=ET.ElementTree(root) tree.write('xx.xml',encoding='utf-8',xml_declaration=True,short_empty_elements=False)
结果:
<?xml version='1.0' encoding='utf-8'?> <home><son name="son1"><grandson name="grandson1"></grandson></son><son name="son2"><grandson name="grandson2"></grandson></son></home>
如果要换行的话,需要加几条代码
def prettify(elem): """将节点转换成字符串,并添加缩进。 """ rough_string = ET.tostring(elem, 'utf-8') reparsed = minidom.parseString(rough_string) return reparsed.toprettyxml(indent=" ")
zipfile和tarfile模块,这两个模块是压缩解压用的
import zipfile z=zipfile.ZipFile('123.zip','w') #z=zipfile.ZipFile('123.zip','a') z.write('conf') zipfile.ZipFile('123.zip','r') z.extractall() z.close() import tarfile tar=tarfile.open('222.tar','w') tar.add('1-1.py',arcname='s1.py') tar.add('2-1.py') tar.close() tar=tarfile.open('222.tar','r') tar.extractall() tar.close()
subprocess模块
通过这个模块可以执行shell命令,同时这个有一个popen功能,可以尝试用这个模块进行expect的功能
import subprocess ret=subprocess.call(["ls","-l"],shell=False) ret1=subprocess.call("ls -l",shell=True) obj=subprocess.Popen(["su"],stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE,universal_newlines=True)
结果:
total 104 -rw-r--r-- 1 wangzhichao staff 946 Jun 19 10:33 1-1.py -rw-r--r-- 1 wangzhichao staff 213 Jun 23 18:40 2-1.py -rw-r--r-- 1 wangzhichao staff 358 Jun 19 11:52 3-1.py -rw-r--r-- 1 wangzhichao staff 449 Jun 19 14:54 4-1.py -rw-r--r-- 1 wangzhichao staff 328 Jun 19 15:05 5-1.py -rw-r--r-- 1 wangzhichao staff 227 Jun 19 15:48 6-1.py -rw-r--r-- 1 wangzhichao staff 365 Jun 19 17:09 7-1.py -rw-r--r-- 1 wangzhichao staff 415 Jun 19 18:09 8-1.py -rw-r--r-- 1 wangzhichao staff 338 Jun 19 18:28 9-1.py -rw-r--r-- 1 wangzhichao staff 44 Jun 23 18:16 conf -rw-r--r-- 1 wangzhichao staff 717 Jun 24 10:46 newxml.xml -rw-r--r-- 1 wangzhichao staff 690 Jun 19 11:12 xml -rw-r--r-- 1 wangzhichao staff 174 Jun 24 12:13 xx.xml
python是支持函数式+面向对象式编程
OOP:(面向对象)
面向对象的三大特性是指:封装、继承和多态
类里面必须要在函数加一个self
面向对象:类,对象
a。创建类
class 类名:
def 方法名(self,xxx):
pass
b。创建对象
对象=类名()
c。通过对象执行方法
对象.方法名(123)
什么时候用面向对象,当某一些函数具有相同参数时,可以使用面向对象的方式,将参数值一次性的封装到对象,以后去对象中取值即可
self 是什么?
self是一个Python自动会给传值的参数
哪个对象的执行方法,self就是谁
obj.fetch('select')。。。。。self=obj
构造方法
类中有一个特殊的方法,__init__,类()自动被执行
class SQLhelp: def __init__(self,host,user,pwd): self.ho=host self.us=user self.pw=pwd def fetch(self,sql): print(self.ho,self.us, self.pw) pass def create(self,sql): pass def remove(self,nid): pass host1="10.11.1.1" user1='wzc' pwd1='8888' obj=SQLhelp(host1,user1,pwd1) obj.fetch("wahhhh")
结果:
10.11.1.1 wzc 8888
Python可以有多继承,其他余元只有单继承
父类、子类,基类、派生类
优先级是自己里面的最高,所以在寻找方法的时候,优先找自己的
class c1: def __init__(self,name,obj): self.name=name self.obj=obj class c2: def __init__(self,name,age): self.name=name self.age=age def show(self): print(self.name) class c3: def __init__(self,name): self.money=11 self.aaa=name c2_obj=c2('wzc',18) c1_obj=c1('www',c2_obj) c3_obj=c3(c1_obj) #print(c1_obj.obj.show()) c3_obj.aaa.obj.show()
结果
wzc
继承关系:
优先级根据继承顺序,左边优先级高
所以这个寻找方法最后总结就是两种方式,分别是深度优先和广度优先