做的较好的拍卖网站,海南省建设网站,做单页网站,太平洋建设集团有限公司网站一、使用Python对Excel读写数据
1.模块、包、库概念
Module#xff08;模块#xff09;#xff1a;扩展名为.py的文件就可以称作为模块Package#xff08;包#xff09;#xff1a;在模块只上的概念#xff0c;为了方便管理.py模块文件进行打包。包目录下第一个文件必…一、使用Python对Excel读写数据
1.模块、包、库概念
Module模块扩展名为.py的文件就可以称作为模块Package包在模块只上的概念为了方便管理.py模块文件进行打包。包目录下第一个文件必须是_init_.py否则就是普通的文件夹目录然后是一些模块文件和子目录加入子目录中也有_init_.py那么它就是这个包的子包了Library库具有相关功能模块的集合。这也是Python的一大特色即具有强大的标准库、第三方库以及自定义模块标准库就是安装Python是自自带的模块第三方库就是由第三方机构发布具有特定功能的模块用户也可以自行开发模块供自己和他人使用
2.Excel读取库xlrd
导入模块的格式import模块名导入xlrdimport xlrd也可以使用别名命名方式import xlrd as xl后续可以用xl代表xlrd模块调用的格式为from模块名import方法名导入xlrd模块中的open_workbook写法为from xlrd import open_workbook as owb后续可以直接使用owb代表open_workbook工作薄对象注意xlrd只能读取xls格式工作薄数据
3.读取Excel工作薄、工作表信息
在导入读取xls文件的库之后则需要读取Excel文件的相关信息以下是一些常见的获取工作薄、工作表对象的方法
# 导入xlrd模块
import xlrd
# 读取工作薄
wb xlrd.open_workbook(工作薄名称.xls)
# 读取工作薄下的所有工作表对象
wsobj wb.sheets()
# 读取工作薄下的所有工作表名称
wsname wb.sheet_names()
# 按指定名称读取工作表对象-方法1
ws1 wb.sheet_by_name(工作表名称)
# 按指定序号读取工作表对象-方法2
ws2 wb.sheet_by_index(1)
# 按指定序号读取工作表对象-方法3
ws3 wb.sheets()[1]4.读取Excel行、列信息
常用获取行、列、单元格信息的方法
# 导入xlrd模块
import xlrd
# 获取工作表对象
ws xlrd.open_workbook(工作薄名.xls).sheet_by_name(工作表名)
# 获取行号
crow ws.nrows
# 获取列号
ccol ws.ncols
# 获取指定行数据
row_data ws.row_values(行号)
# 获取指定列数据
col_data ws.col_values(列号)
# 获取单元格数据
cell_data_1 ws.cell_value(行号,列号)
# 获取单元格数据
cell_data_2 ws.cell(行号,列号).value注意如果以序号方式获取工作表、单元格的数据均是从序号0开始的
5.Excel写入库xlwt
使用安装xlwt库具有创建工作薄、工作表、将数据写入到单元格的功能
6.创建Excel工作薄、工作表和写入单元格
xlwt可以创建工作薄、保存工作薄创建工作表以及将数据写入单元格等常见操作
# 引入xlwt模块
import xlwt
# 新建工作薄
nwb xlwt.Workbook(encoding utf-8)
# 添加工作表
nws nwb.add_sheet(工作表名)
# 写入单元格(第二行第三列值)
nws.write(1, 2, 要写入的值)
# 保存工作薄
nwb.save(工作薄名.xls)7.Excel修改库xlutils
xlutils可以修改工作薄要使用xlutils库就一定要安装xlrd库和xlwt库
8.修改工作薄、工作表、单元格
# 导入xlrd模块
import xlrd
# 导入xlutils中的复制模块
from xlutils.copy import copy
# 获取要修改的工作薄
wb xlrd.open_workbook(工作薄名.xls)
# 复制工作薄
nwb copy(wb)
# 新建工作表
nws1 nwb.add_sheet(工作表名)
# 读取工作表
nws2 nwb.get_sheet(序号)
# 读取工作表
nws3 nwb.get_sheet(工作表名)
# 将数据写入指定工作表
nws1.write(行号, 列表, 值)
# 保存工作薄
nwb.save(工作薄名.xls)注意最后nwb.save保存的工作薄可以和打开时工作薄名一样也可以不一样如果一样则是覆盖原工作薄不一样则是另存工作薄。代码运行时被修改的工作薄必须关闭。
二、循环语句与分支语句
1.for...in循环语句
语法格式
for item in iterable:do something1循环字符串
for循环语句除了遍历指定范围的序列值也可以遍历向指定的字符串将字符串中的每个字符逐个输出
for n in python:print(n)2循环指定范围序列数
如果我们要循环指定范围的数据可以使用range函数一般通过使用for循环语句来逐个取得数字range函数语法为range(start, stop, [step]) start计数从start开始默认是从0开始stop技术到stop结束但不包括stopstep步长默认是1
for n in range(1, 10, 2):print(n)
# 输出1 3 5 7 93嵌套循环
for循环与局可以嵌套使用但每一层for循环语句注意缩进下面使用for嵌套循环方式完成九九乘法表的制作
for x in range(1, 10):for y in range(1, x1):print(%dx%d%-5d % (y, x, y * x), end )2.for...in循环语句应用
1批量创建工作薄
实例使用for循环语句创建1到12月工作薄每个工作薄中创建一个名为统计表的工作表
import xlwt
for m in range(1, 13):# 创建工作薄wb xlwt.Workbook(encoding utf-8)# 创建工作表工作薄中至少要有一个工作表wb.add_sheet(统计表)wb.save(%02d 月.xls % m)2制作九九乘法表
实例将九九乘法表写入Excel表格中只需要定位好对应的单元格然后将格式化好的数据写入单元格即可
import xlwt
# 创建工作薄
wb xlwt.Workbook(encoding utf-8)
# 创建工作表
ws wb.add_sheet(乘法表)
for x in range(1, 10):for y in range(1, x 1):# 将乘法表写入单元格ws.write(x, y, %dx%d%d % (x, y, x * y))
# 保存工作薄
wb.save(乘法表.xls)3.while循环语句
语法格式
while condition:do something循环打印
n 0
while n 5:n 1print(n)
# 打印1 2 3 4嵌套语句制作九九乘法表
x, y 0, 0
while x 9:x 1while y x:y 1print(%dx%d%02d\t % (y, x, x * y), end )# 将内变量初始化为0方便下一次内层循环又从0开始y 0# 换行print()4.while循环语句应用
1读取工作薄信到列表
实例将”招生表.xls“工作表下的所有工作表名称写入”统计结果.xls“工作薄下的“统计表”并且哥每个工作表编写一个序号
import xlrd, xlwt
wb xlrd.open_workbook(招生表.xls)
nwb xlwt.Workbool(encoding utf-8)
nws nwb.add_sheet(统计表)
n 0
# 当n小于工作表个数则循环
while n wb.sheets().__len__():# 将序号写入第1列nws.wirte(n, 0, 表%d % n)# 将工作薄下表明写入第2列nws.wirte(n, 1, wb.sheets()[n].name)n 1
nwb.save(统计结果.xls)2批量创建工作薄、工作表
实例新建20152018年工作薄文件每个工作薄文件中再分别新建112月的工作表
import xlwt
y, m 2015, 1
while y 2018:nwb xlwt.Workbook(encoding utf-8)while m 12:nwb.add_sheet(%d年%d月 % (y, m))m 1nwb.save(%d年.xls % y)y 1m 15.if条件语句
语法格式
if conditional test:do something判断分数
# 输入要判断分数
score input(请输入分数)
# 将字符型数字转换为整数
score int(score)
if score 90:print(优秀)6.if...else条件语句
判断分数大于等于90分返回“优秀”否则返回“普通”
score input(请输入分数)
score int(score)
if socre 90:print(优秀)
else: print(普通)7.if语句应用
1将筛选结果写入新工作薄
实例将指定工作薄指定工作表下语文、数学两列成绩同时大于等于80的记录写入新工作薄
import xlrd, xlwt
wb xlrd.open_workbook(成绩表.xls)
ws wb.sheet_by_name(分数表)
nwb xlwt.Workbook(encoding utf-8)
nws nmb.add_sheet(结果)
n, m 0, 0
while n ws.nrows - 1:n 1# 判断两科成绩是否大于等于80分if ws.cell_value(n, 1) 80 and ws.cell_value(n, 2) 80:# 累加m变量作为条件成立时写入的行号m 1# 写入姓名nws.write(m, 0, ws.cell_value(n, 0))# 写入语文成绩nws.write(m, 1, ws.cell_value(n, 1))# 写入数学成绩nws.write(m, 2, ws.cell_value(n, 2))
# 写入标题
nws.write(0, 0, 姓名)
nws.write(0, 1, 语文)
nws.write(0, 2, 数学)
nwb.save(筛选结果.xls)2根据总分判断等级
实例判断语文和数学两个科目之和时属于哪个级别
import xlrd
from xlutils.copy import copy
wb xlrd.open_workbook(成绩单.xls)
ws wb.sheet_by_name(分数表)
# 复制读取工作薄
nwb copy(wb)
# 读取工作表
nws nwb.get_sheet(分数表)
n 0
while n ws.norws - 1:n 1# 将语文和数学成绩相加subtotal ws.cell_value(n, 1) ws.cell_value(n, 2)if subtotal 180:nws.write(n, 3, 优秀)elif subtotal 160:nws.write(n, 3, 良好)elif subtotal 120:nws.write(n, 3, 中等)else:nws.write(n, 3, 差)
nwb.save(成绩表.xls)8.break语句
终止break语句所在的循环当循环或判断之行动break语句时即使判断条件为True或者序列尚未完全被遍历都会跳出循环或判断for循环语句中的break应用
for c in abcdefg:if c d:# 跳出当前for循环breakelse:print(c)while循环语句中的break应用
n 0
while True:n 1if n 5:breakelse:print(n)9.continue语句
当循环或判断执行到continue语句时continue后的语句将不再执行会跳出当次循环继续执行循环中的下一次循环for循环语句中的continue应用
for c in range(1, 11):if c 5:print(我是5)# 跳出当次循环不再执行此语句之后的语句继续下一次循环continueprint(c)while循环语句中的continue应用
n 0
while n 6:n 1if n 3:print(我是3)# 跳出当次循环不再执行此语句之后的语句继续喜爱次循环continueprint(n)10.综合应用
实例要求统计出业绩表中每个人的累计业绩大于等于1000表示达标需要统计出开始达标的月份以及业绩
import xlrd
from xlutils.copy import copy
wb xlrd.open_workbook(业绩表.xls)
# 读取工作薄下的业绩统计工作表
ws wb.sheet_by_name(Sheet1)
# 复制工作薄
nwb copy(wb)
# 读取工作薄下的统计结果工作表
nws nwb.get_sheet(统计结果)
subtotal, n 0, 0
# 遍历行号
for r in range(1, ws.nrows):# 遍历列号for c in range(1, 13):# 累加业绩数据subtotal ws.cell_value(r, c)if subtotal 1000:n 1# 将姓名写入单元格nws.write(n, 0, ws.cell_value(n, 0))# 将月份写入单元格nws.write(n, 1, %d月份 % c)# 将业绩写入单元格nws.write(n, 2, subtotal)# 退出当前循环break# 重置变量subtotal 0
nwb.save(业绩表.xls)三、字符串处理技术
1.字符串切片
字符串时最常用的一种数据类型Python中的字符串时不能修改的只能做提取、拆分、合并重组等操作
1提取单个字符
提取字符串中指定的位置的单个字符表示方式为str[位置]既可以从开头计算也可以从结尾计算从开头计算单个字符的表示方法
str Excel
print(str[0], srt[2])
# 返回值为E c从结尾提取单个字符的表示方法
str Excel
print(str[-1], str[-2])
# 返回值为l e2提取多个字符
提取字符串中某一段字符的表示方式为str[开始位置:结束位置]
str Excel
# 从左计算指定的起始位置到指定的终止位置
print(str[1:3]) # 返回值xc
# 从左计算从开头提取到指定位置
print(str[:3]) # 返回值Exc
# 从左计算从指定的其实位置到结束
print(str[2:]) # 返回值cel
# 从右计算指定的其实位置到指定的终止位置
print(str[-3:-1]) # 返回值ce
# 从右提取指定的其实位置到结束
print(str[-3:]) # 返回值cel
# 提取所有字符串
print(str[:]) # 返回值Excel字符串提取还可以设置步长值表示方式为str[开始位置:结束位置:步长值]
2.字符串切片应用
1整理工作表数据
将成表工作薄分数表中的第1列的部门和姓名分别提取到新工作博中的不同列
import xlrd, xlwt
wb xlrd.open_workbook(成绩表.xls)
ws wb.sheet_by_name(分数表)
nwb xlwt.Workbook(encodingutf-8)
nws nwb.add_sheet(Sheet1)
n 0
# 循环分数表中第1列的数据
for c in ws.col_vlaues(0):# 提取第1列中的部门数据并写入nws.write(n, 0, c[:3])# 提取第1列中的姓名数据并写入nws.write(n, 1, c[4:])# 提取第2列的数据nws.write(n, 2, ws.cell_value(n, 1))n 1
nwb.save(结果表.xls)3.字符串长度个数统计
1len
len方法返回对象字符、列表、元组等长度或项目个数
print(len(Excel)) # 返回值为52count
count方法用于统计字符串里指定字符串出现的次数可选参数为在字符串搜索的开始与结束位置语法格式str.count(sub, start0, end len(string)) str被搜索的父字符串sub搜索的子字符串start字符串开始搜索的位置。默认为第一个字符第一个字符索引值为0end字符串中结束搜索的位置。字符中第一个字符的索引为0。默认为字符串的最后一个位置
s 销售部-张三财务部-李四销售部-王五销售部-琳琳
print(s.count(销售部)) # 统计销售部在字符串出现的次数
print(s.count(销售部), 5) # 指定搜索字符串的起始位置
print(s.count(销售部, 5, 18)) # 指定搜索字符串的起始和结束位置实例分别统计“优良中差”4个等级出现的次数
import xlrd
wb xlrd.open_workbook(等级表.xls)
ws wb.sheet_by_name(Sheet1)
n, m 0, 0
for l in 优良中差:# 循环行号while n ws.nrows - 1:n 1# 累加等级次数m ws.cell_value(n, 1).count()print(m) # 打印等级出现的次数n, m 0, 04.字符串查找
1index
index方法用于从字符串中找出某个对象第一个匹配项的索引位置如果查找的字符串不存在会报一个异常语法格式str.index(sub, [start 0], [end len(str)]) str父字符串sub指定检索的子字符串start可选参数开始索引默认为0可单独指定end可选参数结束索引默认为字符串的长度不能单独指定
s A组89B组98C组100D组78B组74
print(s.index(B组)) # 返回每一个匹配项的索引位置
print(s.index(B组, 6)) #指定查找的起始位置
print(s.index(B组, 6, 15)) # 指定查找的起始位置和终止位置不存在查找字符抛出异常2find
find方法从字符串中找出某个子字符串第一个匹配项的索引位置该方法与index方法一样如果子字符串不在字符串中不会报异常而是返回-1实例统计等级“优”在下半年数量
import xlrd
from xlutils.copy import copy
wb xlrd.open_workbook(等级表.xls)
ws wb.sheet_by_name(Sheet1)
nwb copy(wb)
# 读取工作表数据
nws nwb.get_sheet(Sheet1)
n 0
while n ws.nrows - 1:n 1# 获取要处理的单元格s ws.cell_value(n, 1)# 将统计结果写入单元格nws.write(n, 2, s.count(优, s.find(\n)))
nwb.save(等级表.xls)5.字符串的替换
replace方法用于把字符串中指定的就子字符串替换成指定的新子字符串如果指定count可选参数则替换指定的次数默认全部替换语法格式str.replace(old, new, [count str.count(old)]) old指定的就子字符串new指定的新子字符串count可选参数替换的次数默认为指定的旧子字符串在字符串中出现的总次数
S A组-优秀B组-良好C组-优秀D组-优秀
print(S.replace(优秀, 晋级))
# 返回值为A组-晋级B组-晋级C组-晋级D组-晋级
print(S.replace(优秀, 晋级, 1))
# 返回结果为A组-晋级B组-良好C组-优秀D组-优秀
print(S.replace(优秀, 晋级, 2))
# 返回结果为A组-晋级B组-良好C组-晋级D组-优秀实例将编号两侧的横线用括号替换
import xlrd
from xlutils.copy import copy
wb xlrd.open_workbook(等级表.xls)
ws wb.sheet_by_name(Sheet1)
# 复制工作薄
nwb copy(wb)
nws nwb.get_sheet(Sheet1)
n 0
while n ws.nrows - 1:n 1# 读取需要替换的单元格值val ws.cell_vlaue(n, 0)# 将格式为“产品A-NED001-5478-8848”的值替换为“产品A(NED001)5478-8848”nws.write(n, 1, val.replace(-, (, 1).replace(-,), 1))
nwb.save(替换格式等级表.xls)6.字符串的拆分与合并
1split
split方法拆分字符串。通过指定分隔符对字符串进行切片并返回分割后的字符串列表list语法格式str.split(str , num string.count(str)) str表示为分隔符默认为空格但是不能为空()若字符串中没有分隔符则把整个字符串作为列表的一个元素num表示分割次数。如果存在参数num则仅分隔成num1个子字符串并且每个子字符串可以付给新的变量
s 张三、李 四、王二 麻子、小明
print(s.split()) # 返回值[张三、李, 四、王二, 麻子、小明]
print(s.split(、)) # 返回值[张三, 李 四, 王二 麻子, 小明]
print(s.split(、, 2)) # 返回值[张三, 李 四, 王二 麻子、小明]
print(list(s)) # 返回值[张, 三, 、, 李, , 四, 、, 王, 二, , , 麻, 子, 、, 小, 明]4join
join方法用于将序列中的元素以指定的爱抚连接成一个新的字符串语法格式str.join(sequence) sequence要连接的元素序列、字符串、元素、字典
l [a, b, c]
print(-, l) # 返回值a-b-c四、列表处理技术
1.列表基础
列表是python中最常用的对象熟练掌握列表的各种操作非常关键。列表的格式为[元素1,元素2,元素3...]列表中元素的数据类型可以是任意数据类型但要注意正确的表达方式列表中可以嵌套列表
2.列表切片
python中符合序列的有序序列都支持切片例如列表、字符串、元组语法格式[start:end:step] start起始索引从0开始-1表示结束end结束索引step步长步长为正时从左向右取值步长为负时反向取值 注意切片的结果不包含结束索引即不包含最后一位-1代表列表的最后一个位置索引
l [a, b, c, d, e, f, g]
print(l[2:6]) # [c, d, e, f]
print(l[:4]) # [a, b, c, d]
print(l[5:]) # [f, g]
print(l[-5:-2]) # [c, d, e]
print(l[-3:]) # [e, f, g]
print(l[-6:6]) # [b, c, d, e, f]
print(l[2:-1]) # [c, d, e, f]
print(l[:]) # [a, b, c, d, e, f, g]
print(l[::2]) # [a, c, e, g]3.列表的增加、删除、修改
1列表元素的修改
l [a-黄瓜, b-南瓜, c-冬瓜, d-苦瓜, e-西瓜]
l[2] c-我不是冬瓜2列表元素的增加
l [张三]
l [李四] l # 加号添加
l.append(王二) # append添加
l.insert(2, 麻子) # insert插入添加指定位置3列表元素的删除
l2 [a-黄瓜, b-南瓜, c-冬瓜, d-苦瓜, e-西瓜]
# 删除-指定下表删除没有该元素时报错
l2.pop()
l2.pop(0)
# 删除-按指定值删除
l3 [a-黄瓜, b-南瓜, c-冬瓜, d-苦瓜, e-西瓜]
l3.remove(c-冬瓜)
# 删除-del语句删除
l4 [a-黄瓜, b-南瓜, c-冬瓜, d-苦瓜, e-西瓜]
del l4[-2]
# 清空列表
l4 [a-黄瓜, b-南瓜, c-冬瓜, d-苦瓜, e-西瓜]
l5.clear()4.实例应用
汇总每个人的总成绩
import xlrd
from xlutils.copy import copy
wb xlrd.open_workbook(成绩统计表.xls)
ws wb.sheet_by_name(成绩)
nwb copy(wb)
nws nwb.get_sheet(Sheet2)
n 0; m 0
# 循环行号
while n ws.nrows - 1:n 1# 拆分提取分数数据格式为语文-89-数学-85-历史96转换后格式为[89,85,96]l ws.cell_value(n, 1).split(-)[1::2]# 循环分数列表for v in l:# 转换累加分数m int(v)# 将姓名写入A列单元格nws.write(n, 0, ws.cell_value(n, 0))# 将总分写入B列单元格nws.writ(n, 1, m)# 再次初始化m总分数变量m 0
nwb.save(成绩统计表.xls)5.列表操作符
1基础操作符
组合重复*元素是否存在于列表中in
# 组合
print([1, 2, 3] [100, 200])
# 重复
print([1, 2, 3] * 4)
# 指定值在列表中是否存在
print(1 in [1, 2, 3])实例判断指定姓名在指定日期是否值班
import xlrd
from xlutils.copy import copy
wb xlrd.open_workbook(值班表.xls)
ws wb.sheet_by_name(值班表)
nwb copy(wb)
nws nwb.get_sheet(值班表)
r 0
while r ws.nrows -1:r 1# 读取要判断的行列表row ws.row_values(r)# 判断小明在行列表中是否存在if 小明 in row:nws.write(r, 6, √)else:nws.write(r, 6, x)
nwb.save(值班表.xls)6.列表操作符
列表推导式是Python基础好用又重要的功能也是最受欢迎的Python特性之一可以说掌握它是成为合格Python程序员的基本标准。本质上可以吧列表推导式理解成一种集合了转换和筛选共功能的函数通过这个函数把一个列表转换成另一个列表。注意是另一个新列表原列表保持不变
1列表推导
[表达式 for 变量 in 列表]
2列表嵌套推导
[表达式 for 变量1 in 列表1 for 变量2 in 列表2]
3条件列表推导
[表达式 for 变量1 in 列表 if 条件]
l1 [83, 98, 91, 100]
l2 [x for x in l1]
print(l2) # [83,98,91,100]
l3 [[98,86,74,85],[96,99,75,92],[69,93,87,85]]
l4 [[x100 for x in l] for l in l2]
print(l4) # [[198,186,174,185],[196,199,175,192],[169,193,187,185]]