# 自定义Python模块'''
除了使用别人的模块,我们也可以自己定义一些模块,自己定义的模块叫做自定义模块。
放入到/usr/local/lib/python3.7/site-packages
然后在终端引用就可以了
user_defined_test.py中的内容:
def hello():
print("hello, this is my first module!")
终端调用:
import user_defined_test
user_defined_test.hello() # 输出hello, this is my first module!
'''
# 异常处理实战'''
# 异常处理格式
try:
程序
except Exception as 异常处理名称:
异常处理部分
try:
for i in range(0, 10):
print(i)
if (i == 4):
print(j)
print("hello!")
except Exception as err:
print(err)
for i in range(0, 10):
try:
print(i)
if (i == 4):
print(j)
except Exception as err:
print(err)
print("hello!")
'''
# 类和对象'''
类:具有某种特征的事物的集合(群体)。
对象:群体(类)里面的个体。
类是抽象的,对象是具体的。
# 创建类
class 类名:
类里面的内容
pass 是占位语句,占一个位置,未进行任何处理
# 实例化类
对象名 = 类名()
class cl1:
pass
a = cl1()
'''
# 构造函数'''
类在实例化的时候自动首先触发的方法。
构造函数固定名字:
_init_(self, 参数)
self:在类中的方法必须加上self参数
构造函数实际意义:初始化
# 类中声明参数:给构造方法加上参数
class cl2:
def __init__(self):
print("i am cl2 self!")
b = cl2()
class cl3:
def __init__(self, name, job):
print("my name is " + name +" my job is " + job)
c = cl3("aa", "student")
'''
# 属性和方法'''
属性:静态的特征。例如:头发,手臂
方法:动态的特征。例如:唱歌,写字
属性:类里面的变量
格式:
self.属性名
方法:类里面的函数
格式:
def 方法名(self, 参数)
class cl4:
def __init__(self, name, job):
self.myname = name
self.myjob = job
d = cl4("bb", "student")
print(d.myname)
class cl5:
def myfunc1(self, name):
print(name + " this is myfunc1!")
e = cl5() # 实例化时候不需要给方法传参数,调用时候需要
print(e.myfunc1("cc"))
class cl6:
def __init__(self, name):
self.myname = name
def myfunc1(self):
print("hello " + self.myname)
f = cl6("dd")
print(f.myfunc1())
'''
# 继承与重载'''
继承:把某一个或多个类(基类)的特征拿过来。
重载:在子类(派生类)里面对继承过来的特征重新定义。
父类:基类
子类:派生类
# 继承
单继承:父类只有一个
格式:class 子类(父类)
多继承:父类有多个
格式:class 子类(父类,父类)
# 重载
某个家庭有父亲、母亲、儿子、女儿,父亲可以说话,母亲可以写字,
大儿子继承父亲,女儿同时继承了父母并有听东西能力,小儿子继承父亲并优化了说话能力
class father():
def speak(self):
print("i can speak!")
class son(father):
pass
class mother():
def write(self):
print("i can write!")
class daughter(father, mother):
def listen(self):
print("i can listen!")
class son2(father):
def speak(self):
print("i can speak2!")
s = son()
print(s.speak())
d = daughter()
print(d.speak())
print(d.write())
print(d.listen())
# 作业: 将多个Excel表格里面的内容合并到一个文件中。
要点:使用第三方模块操作,比如xlrd、xlwt,需要注意一个Excel中有多个sheet
思路:采用操作Excel模块去实现,比如xlrd、xlwt、openpyxl、xlsxwriter等模块。
xlrd模块主要用于读取Excel表,xlwt和xlsxwriter模块不支持修改表,追加信息时候比较麻烦
解决方法:
A:换成其他模块,例如openpyxl,这种方式较为简单。
B:仍然使用xlwt和xlsxwriter等模块,先将每次读取的信息存储到list(列表)中,然后最后一次写入,这种方式较为复杂。
import xlrd,xlsxwriter
# 设置要合并的所有文件
allxls = ["./test1.xls", "./test2.xls"]
# 设置合并到的文件
endxls = "./endxls.xls"
# 打卡表格
def open_xlsx(file):
try:
fh = xlrd.open_workbook(file)
return fh
except Exception as err:
print(str("打开出错,错误为:"+err))
# 获取所有sheet
def getsheet(fh):
return fh.sheets()
# 读取某个sheet的行数
def getnrows(fh, sheet):
table = fh.sheets()[sheet]
content = table.nrows
return content
# 读取某个文件的内容并返回所有行的值
def getfilect(fh, fl, shnum):
fh = open_xlsx(fl)
table = fh.sheet_by_name(shname[shnum])
num = getnrows(fh, shnum)
lenrvalue = len(rvalue)
for row in range(0, num):
rdata = table.row_values(row)
rvalue.append(rdata)
filevalue.append(rvalue[lenrvalue])
return filevalue
# 存储所有读取的结果
filevalue = []
# 存储一个标签的结果
svalue = []
# 存储一行结果
rvalue = []
# 存储各sheet名
shname = []
# 读取第一个待读文件,获得sheet数
fh = open_xlsx(allxls[0])
sh = getsheet(fh)
x = 0
for sheet in sh:
shname.append(sheet.name)
svalue.append([])
x+=1
# 依次读取各sheet的内容
for shnum in range(0, x):
for f1 in allxls:
print("正在读取文件:"+str(f1)+"的第"+str(shnum)+"个标签的内容")
filevalue = getfilect(fh, f1, shnum)
svalue[shnum].append(filevalue)
print(svalue[0])
# 由于append具有叠加关系,分析可得所有信息均在svalue[0][0]中存储
# savlue[0][0]元素数量为sheet标签数(sn)*文件数(fn)
sn = x
fn = len(allxls)
endvalue = []
# 设置一个函数专门获取svalue里面的数据,即获取各项标签的数据
def getsvalue(k):
for z in range(k, k+fn):
endvalue.append(svalue[0][0][z])
return endvalue
# 打开最终写入的文件
wbl = xlsxwriter.Workbook(endxls)
# 创建一个sheet工作对象
ws = wbl.add_worksheet()
polit = 0
linenum = 0
# 依次遍历每个sheet中的数据
for s in range(0, sn*fn, fn):
thisvalue = getsvalue(s)
tvalue = thisvalue[polit:]
# 将一个标签的内容写入新文件中
for a in range(0,len(tvalue)):
for b in range(0, len(tvalue[a])):
for c in range(0, len(tvalue[a][b])):
print(linenum)
print(c)
data = tvalue[a][b][c]
ws.write(linenum, c, data)
linenum+=1
# 叠加关系,需要设置分割点
polit = len(thisvalue)
wbl.close()
'''