今日上课的主要内容
一,模块:
二,面向对象(上):
作业(计算器):
http://www.cnblogs.com/wupeiqi/articles/4949995.html
模块:
configparser:都会按照字符串进行处理
import configparser
config = configparser.ConfigParser()
config.read('xxxooo', encoding='utf-8')
练习:
f1:
[section1]
k1 = v1
k2:v2
[section2]
k10 = v10
import configparser
config = configparser.ConfigParser()
config.read('f1',encoding='utf-8')
ret = config.sections()
print(ret)
ret = config.items("section2")
print(ret)
ret = config.options('section2')
print(ret)
v = config.get('section1', 'k1')
print(v)
has_sec = config.has_section('section1')
print(has_sec)
# config.add_section("section3")
# config.write(open('xxxooo', 'w'))
#
# config.remove_section("section3")
# config.write(open('xxxooo', 'w'))
has_opt = config.has_option('section1', 'k1')
print(has_opt)
config.remove_option('section1', 'k1')
config.write(open('xxxooo', 'w'))
config.set('section1', 'k10', "123")
config.write(open('xxxooo', 'w'))
XML:
浏览器返回的字符串
1,html
2,json
3,xml
页面上做展示(字符串类型的一个XML格式数据)
配置文件(文件,内部数据XML格式)
每一个节点都是 element的对象
练习1:
from xml.etree import ElementTree as ET
tree = ET.parse('xo.xml')
root = tree.getroot()
for child in root:
print(child.tag,child.attrib)
for grandchild in child:
print(grandchild.tag,grandchild.attrib)
str_xml = open('xo.xml', 'r').read()
root = ET.XML(str_xml)
for node in root.iter('year'):
new_year = int(node.text) + 1
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')
tree = ET.parse('xo.xml')
root = tree .getroot()
for node in root.iter('year'):
new_year = int(node.text) + 1
node.text = str(new_year)
node.set('age','18')
node.set('name','sxl')
del node.attrib['name']
tree.write('new2.xml',encoding='utf-8')
练习2:
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="\t")
root = ET.Element('famliy')
son1 = ET.Element('son1',{'name':'大儿子'})
son2 = ET.Element('son2',{'name':'小儿子'})
grandson1 = ET.Element('grandson', {'name': '儿11'})
grandson2 = ET.Element('grandson', {'name': '儿22'})
son1.append(grandson1)
son2.append(grandson2)
root.append(son1)
root.append(son2)
raw_str = prettify(root)
tree = ET.ElementTree(root)
tree.write('oooo.xml',encoding='utf-8', short_empty_elements=False)
f = open("xxxoo.xml",'w',encoding='utf-8')
f.write(raw_str)
f.close()
zipfile与tarfile
import zipfile
z = zipfile.ZipFile('xml.zip','w')
z.write('new.xml')
z.write('new2.xml')
z.close()
z = zipfile.ZipFile('xml.zip','r')
z.extract('new.xml')
import tarfile
z = tarfile.open('xml.tar','w')
z.add('new.xml','new_1.xml')
z.add('new2.xml','new_2.xml')
z.close()
z = tarfile.open('xml.tar','r')
print(z.getnames())
res = z.getmember("new_2.xml")
z.extract(res)
subprocess:
import subprocess
ret = subprocess.call("dir", shell=True)
print(ret)
ret = subprocess.check_output("dir C:", shell=True)
print(ret)
ret = subprocess.check_call("dir C:", shell=True)
print(ret)
######################################
com = subprocess.Popen("ls", shell=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE)
send_data = com.stdout.read()
sta_er = com.stderr.read()
send_data = str(send_data, encoding='gbk')
return send_data
shutil:
http://www.cnblogs.com/wupeiqi/articles/5501365.html
拷贝文件.
*面向对象
python 函数式+面向对象
函数式编程,面向对象编程实现:发送邮件的功能
#函数
def mail(email,message):
print("去发吧")
return True
mail('alex3714@126.com','好人')
面向对象:类,对象
class Foo:
#方法
def mail(self,email,message):
print('去发吧')
return True
#调用
1 创建对象,类名()
obj = Foo()
2 通过对象去执行方法
obj.mail('alex3714@126.com','好人')
3 类和对象
a创建类
class 类名:
def 方法名(self,xxxx):
pass
b创建对象
对象 = 类名()
c通过对象执行方法
对象.方法名(123)
4
#函数式:
def fetch(host,username,password,sql):
pass
def create(host,username,password,sql):
pass
def remove(host,username,password,nid):
pass
def modify(host,username,password,name):
pass
#面向对象
class SQLHelper:
def fetch(self, sql):
print(sql)
print(self.hhost)
print(self.uusername)
print(self.pwd)
def create(host,username,password,sql):
pass
def remove(host,username,password,nid):
pass
def modify(host,username,password,name):
pass
obj = SQLHelper()
obj.hhost = 'c1.salt.com' #变成self
obj.uusername = 'alex'
obj.pwd = '123'
obj.fetch("select * from A")
########》什么时候用面向对象?当某一些函数具有相同参数时,可以使用面向对象的方式,将参数一次性的封装到对象,以后去对象中取值即可。
5 self是什么鬼?
self是一个python自动会给传值的参数
那个对象执行方法,self就给谁
obj2.fetch('....') self == obj2
6
类中有一个特殊的方法 __init__,类()自动执行
叫做构造方法。
可以将用到的对象都写到这个函数里面。
class SQLHelper:
def __init__(self,a1,a2,a3):
self.hhost = a1
self.uusername = a2
self.pwd = a3
def fetch(self, sql):
print(sql)
print(self.hhost)
print(self.uusername)
print(self.pwd)
def create(host,username,password,sql):
pass
def remove(host,username,password,nid):
pass
def modify(host,username,password,name):
pass
#
obj1 = SQLHelper('c1.salt.com','alex','123') #self = obj1
obj2 = SQLHelper('c2.salt.com','alex','223') #self = obj2
obj1.fetch('selcet * from A')
obj2.fetch('selcet * from A')
7 面向对象
三大特性:封装,继承,多态
封装:
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.age)
class c3:
def __init__(self,aaa):
self.a = aaa
c2_obj = c2('c2',19)
c1_obj = c1('c1',c2_obj)
#c2_obj.show()
# print(c1_obj.obj.age)
c3_obj = c3(c1_obj) # aaa = c1_obj c3_obj.a = c1_obj
c3_obj.a.obj.show()
python 继承
-- 可支持多继承
class F1: #父类,基类
def show(self):
print('show')
class F2(F1): #子类,派生类
def bar(self):
print('bar')
多继承,左边的优先级高。会先继承优先级高的。往上找
class F1:
def show(self):
print('show')
def Foo(self):
print(self.name)
class F2(F1):
def __init__(self,name):
self.name = name
def bar(self):
print("bar")
F2_obj = F2('alex')
F2_obj.bar()
F2_obj.Foo()