700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Python零基础速成班-第14讲-Python处理Excel和Word 使用openpyxl和docx包详解 图表入门

Python零基础速成班-第14讲-Python处理Excel和Word 使用openpyxl和docx包详解 图表入门

时间:2024-04-29 19:47:20

相关推荐

Python零基础速成班-第14讲-Python处理Excel和Word 使用openpyxl和docx包详解 图表入门

Python零基础速成班-第14讲-Python处理Excel和Word,使用openpyxl和docx包详解,图表入门

学习目标

Python处理Excel(使用openpyxl包)、图表入门\Python处理Word(使用docx包)\课后作业(4必做1挑战)

友情提示:将下文中代码拷贝到JupyterNotebook中直接执行即可,部分代码需要连续执行。

1、Python处理Excel(使用openpyxl包)

绝大多数办公室职员,经常会同Excel打交道,一般情况下,敲几个文字、做几行数据、绘几张图表,都比较简单。但是在Excel深入应用过程中,有可能会面对一系列公式、纷繁的统计、复杂数据处理和数据分析,这时就需要一款Excel处理神器—openpyxl(python库文件),极大解放办公室生产力,用极少量代码就能玩转Excel,实现办公自动化。

openpyxl官方文档:https://openpyxl.readthedocs.io/en/stable/

1.1 安装并引入openpyxl包

在线安装命令:pip install openpyxl

清华镜像安装:pip install -i https://pypi.tuna./simple openpyxl

如下例,安装后引入openpyxl包,执行下例代码在D盘根目录下快速创建一个text1.xlsx文件,方便后期教学使用(具体代码含义可以不用深究,通过后面学习会逐渐了解掌握相关语法)

import openpyxlworkbook = openpyxl.Workbook()workbook.create_sheet(index=0,title="Sheet1")# 创建3个页签workbook.create_sheet(index=1,title="Sheet2")workbook.create_sheet(index=2,title="Sheet3")del workbook["Sheet"]# 删除新Excel默认页签项workbook.active = workbook["Sheet1"]# 设置当前页签Sheet1,即光标停留的页签sheet = workbook.active# 取当前页签datas =[["第{}行第{}列".format(i,j) for j in range(1,4)] for i in range(1,6)]# 创建一个5行3列的数据for data in datas:# 填充数据到表格中sheet.append(data)workbook.save("D://text1.xlsx")# 保存表格

1.2 读取Excel文件及页签信息

使用wb = openpyxl.load_workbook(" 文件路径及文件名 ") 读取Excel文件,wb可以自己命名。使用sheet = wb[ 页签名 ] 读取页签,sheet可以自己命名,sheet.title 输出页签名称。activesheet = wb.active 获取当前光标停留的页签即默认页签。

import openpyxl# 读取Excel文件wb = openpyxl.load_workbook("D://text1.xlsx")# 读取所有页签print("所有页签:",wb.sheetnames) # 获取某一个页签对象sheet = wb["Sheet2"]print("获取某一个页签对象:",sheet," 其类型为:",type(sheet))# 获取页签的名称print("页签的名称是:",sheet.title)# 获取当前光标停留的页签即默认页签activesheet = wb.activeprint("当前默认页签是:",activesheet.title)

所有页签: ['Sheet1', 'Sheet2', 'Sheet3', 'Sheet']获取某一个页签对象: <Worksheet "Sheet2"> 其类型为: <class 'openpyxl.worksheet.worksheet.Worksheet'>页签的名称是: Sheet2当前默认页签是: Sheet1

1.3 从页签中读取单元格信息

可以通过两种方式获取单元格信息

直接通过单元格坐标来获取对象,如sheet[“A1”]、sheet[“B2”],对象语法如下:

sheet[“A1”].value获取单元格内容

sheet[“A1”].row获取行号

sheet[“A1”].column获取列号

sheet[“A1”].coordinate获取坐标可以通过行号+列号的方式获取对象,如sheet.cell(row=1, column=2),并通过value获取单元格内容。

import openpyxlwb = openpyxl.load_workbook("D://text1.xlsx")# 读取Excel文件sheet = wb["Sheet1"]# 获取Sheet1页签对象# 输出A1单元格对象print("A1单元格对象是:",sheet["A1"])# 输出A1单元格内容print("A1单元格内容是:",sheet["A1"].value) # 输出B2单元格行、列、值print("行: %s, 列 %s 值 %s" % (sheet["B2"].row, sheet["B2"].column, sheet["B2"].value))print("单元格 %s 值是 %s" % (sheet["B2"].coordinate, sheet["B2"].value))

A1单元格对象是: <Cell 'Sheet1'.A1>A1单元格内容是: 第1行第1列行: 2, 列 2 值 第2行第2列单元格 B2 值是 第2行第2列

import openpyxlwb = openpyxl.load_workbook("D://text1.xlsx")# 读取Excel文件sheet = wb["Sheet1"]# 获取Sheet1页签对象# 通过行号+列号的方式获取单元格print("第一行第二列的值是:",sheet.cell(row=1, column=2).value)# 循环获取第2列前4行的值for i in range(1, 5):print(sheet.cell(row=i, column=2).value)

第一行第二列的值是: 第1行第2列第1行第2列第2行第2列第3行第2列第4行第2列

sheet.max_row获取当前页签最大行

sheet.max_column获取当前页签最大列

import openpyxlwb = openpyxl.load_workbook("D://text1.xlsx")# 读取Excel文件sheet = wb["Sheet1"]# 获取Sheet1页签对象print("最大行是第:{}行".format(sheet.max_row))print("最大列是第:{}列".format(sheet.max_column))

最大行是第:5行最大列是第:3列

补充:列字母和数字之间转换方法:如A列对应第1列,B列对应第2列,AA列对应第27列。

方法1:get_column_letter 将列数字转化为字母。

方法2:column_index_from_string 将列字母转化为数字。

import openpyxlfrom openpyxl.utils import get_column_letter, column_index_from_string# 将列数字转化为字母print(get_column_letter(1))print(get_column_letter(2))print(get_column_letter(27))print(get_column_letter(900))# 将列字母转化为数字print(column_index_from_string("A"))print(column_index_from_string("AB"))# 获取Sheet1页签内容最大列,并输出字母wb = openpyxl.load_workbook("D://text1.xlsx")sheet = wb["Sheet1"]print("Sheet1中最大列的字母是:",get_column_letter(sheet.max_column))

ABAAAHP128Sheet1中最大列的字母是: C

1.4 循环读取单元格信息

三种方式:

直接循环所包含单元格的坐标,如[ “A1” : “C3” ],输出Tuple元组格式,可再次循环每行求出每列的值。通过行号+列号的方式循环读取,如sheet.cell(row=i, column=j)。通过list(sheet.rows)循环行,list(sheet.columns)循环列,可单独循环某一行或者某一列。

第一种方式,直接循环坐标,如下例:

import openpyxlwb = openpyxl.load_workbook("D://text1.xlsx")sheet = wb["Sheet1"]# 取A1到C3所有的单元格,输出Tuple元组格式print(sheet["A1":"C3"])for row in sheet["A1":"C3"]:# 循环每一行for cell in row:# 循环每一列print(cell.coordinate, cell.value)print("--- 第 {} 行结束 ---".format(cell.row))

((<Cell 'Sheet1'.A1>, <Cell 'Sheet1'.B1>, <Cell 'Sheet1'.C1>), (<Cell 'Sheet1'.A2>, <Cell 'Sheet1'.B2>, <Cell 'Sheet1'.C2>), (<Cell 'Sheet1'.A3>, <Cell 'Sheet1'.B3>, <Cell 'Sheet1'.C3>))A1 第1行第1列B1 第1行第2列C1 第1行第3列--- 第 1 行结束 ---A2 第2行第1列B2 第2行第2列C2 第2行第3列--- 第 2 行结束 ---A3 第3行第1列B3 第3行第2列C3 第3行第3列--- 第 3 行结束 ---

第二种方式,行号+列号方式循环输出,如下例:

import openpyxlwb = openpyxl.load_workbook("D://text1.xlsx")sheet = wb["Sheet1"]for i in range(1,sheet.max_row+1):# 求最大行数,循环for j in range(1,sheet.max_column+1):# 求最大列数,循环print(sheet.cell(row=i,column=j).coordinate,sheet.cell(row=i,column=j).value)

A1 第1行第1列B1 第1行第2列C1 第1行第3列A2 第2行第1列B2 第2行第2列C2 第2行第3列A3 第3行第1列B3 第3行第2列C3 第3行第3列A4 第4行第1列B4 第4行第2列C4 第4行第3列A5 第5行第1列B5 第5行第2列C5 第5行第3列

第三种方式,通过list(sheet.rows)、list(sheet.columns)方式循环,可单独循环某一行或者某一列,如下例:

import openpyxlwb = openpyxl.load_workbook("D://text1.xlsx")sheet = wb["Sheet1"]print("--- 循环行 ---")for cell in list(sheet.rows)[0]:# 将第一行放入数组循环print(cell.coordinate,cell.value)print("--- 循环列 ---")for cell in list(sheet.columns)[1]:# 将第二列放入数组循环print(cell.coordinate,cell.value)

--- 循环行 ---A1 第1行第1列B1 第1行第2列C1 第1行第3列--- 循环列 ---B1 第1行第2列B2 第2行第2列B3 第3行第2列B4 第4行第2列B5 第5行第2列

1.5 创建和保存Excel文件

使用wb = openpyxl.Workbook() 创建新的Excel文件对象,默认生成新页签Sheet。使用wb.save(" 文件路径及文件名 ")保存新的Excel文件。

import openpyxl# 生成新的Excel对象wb = openpyxl.Workbook()# 读取新文件所有页签print(wb.sheetnames) # 设置当前页签为默认页签Sheet,即光标停留的页签sheet = wb.activeprint(sheet.title)# 修改当前页签名字sheet.title = "NewSheet"print(wb.sheetnames)# 保存当前Excel文件wb.save("D://text2.xlsx")

['Sheet']Sheet['NewSheet']

1.6 创建和删除页签

使用wb.create_sheet(index= ,title= )创建页签,index为页签创建位置索引,title为页签名称,如不传入参数则默认依次在后面增加一个页签。使用del wb[ 页签名 ]删除页签。

import openpyxlwb = openpyxl.Workbook()# 创建一个新的Excel对象# 默认在后面增加一个页签wb.create_sheet()print(wb.sheetnames)# 在索引0位置插入一个页签wb.create_sheet(index=0, title="First Sheet")# 在索引2位置插入一个页签wb.create_sheet(index=2, title="Middle Sheet")print(wb.sheetnames)# 修改 Sheet1页签的名称wb["Sheet1"].title = "Last Sheet"# 删除 Sheet页签del wb["Sheet"]print(wb.sheetnames)# 保存当前Excel文件wb.save("D://text3.xlsx")

['Sheet', 'Sheet1']['First Sheet', 'Sheet', 'Middle Sheet', 'Sheet1']['First Sheet', 'Middle Sheet', 'Last Sheet']

打开刚刚创建的text2.xlsx,分别增加、修改、删除页签,重新设置当前光标停留页签,最后保存

重新设置当前光标停留为第2个页签的方式为 wb._active_sheet_index = 1 效果等同于我们上面学习到的 wb.active = wb[ “HomeWork” ]

import openpyxlwb = openpyxl.load_workbook("D://text2.xlsx")print(wb.sheetnames)wb.create_sheet(index = 1,title="HomeWork")wb.create_sheet("MyHomeWork1")wb["NewSheet"].title = "Notebook"print(wb.sheetnames)del wb["MyHomeWork1"]# 重新设置当前光标停留为第2个页签,从0开始计数,效果等同于wb.active = wb["HomeWork"]wb._active_sheet_index =1print(wb.active)wb.save("D://text2.xlsx")

['NewSheet']['Notebook', 'HomeWork', 'MyHomeWork1']<Worksheet "HomeWork">

1.7 单元格赋值

两种方式:

通过坐标直接给单元格赋值。通过行号+列号的方式给单元格赋值。通过循环填充 sheet.append(data) 的方式,快速给单元格赋值。注意,append默认会在当前最后一行的后面追加填充。

第一种方式,通过坐标直接给单元格赋值,如下例我们新创建一个Excel对象,给A1单元格赋值"Hello, world!",最后保存D://text4.xlsx。

import openpyxlwb = openpyxl.Workbook()sheet = wb["Sheet"]sheet["A1"] = "Hello, world!"print(sheet["A1"].value)wb.save("D://text4.xlsx")

Hello, world!

第二种方式,通过行号+列号的方式给单元格赋值,如下例我们打开上面新创建的text4.xlsx文件,给第2行第3列赋值"我喜欢100分"。

import openpyxlwb = openpyxl.load_workbook("D://text4.xlsx")sheet = wb.activesheet.cell(row=2,column=3,value="我喜欢100分")print(sheet["C2"].value)wb.save("D://text4.xlsx")

我喜欢100分

第三种方式,通过循环填充 sheet.append(data) 的方式,快速给单元格赋值,如下例我们打开上面新创建的text4.xlsx文件,循环填充准备好的数据。

import openpyxlwb = openpyxl.load_workbook("D://text4.xlsx")sheet = wb.activedatas=[["优秀","大于90分"],["良好","大于80分"],["及格","高于60分"],["不及格","低于60分"]] # 填充好的数据# 循环填充数据for data in datas:sheet.append(data)wb.save("D://text4.xlsx")

1.8 设置单元格字体样式

语法:

myFont = Font(size= ,bold= ,italic= ,…) 表示创建一种样式。[“A1”].font = myFont 表示将该样式应用于单元格A1。

import openpyxlfrom openpyxl.styles import Fontwb = openpyxl.Workbook()sheet = wb["Sheet"]# 创建一种样式,24号、斜体、加粗、宋体newFont = Font(size=24, italic=True ,bold=True,name ="宋体")# 将该样式应用于单元格A1sheet["A1"].font = newFont sheet["A1"] = "明天会更好!"wb.save("D://textfont.xlsx")

1.9 Excel公式

语法:直接将公式写入单元格中,如=SUM(A1:A2)、=AVERAGE(D2:D4)、=MAX(D2:D4)等

import openpyxlwb = openpyxl.Workbook()sheet = wb.activesheet["A1"] = 200sheet["A2"] = 300sheet["A3"] = "=SUM(A1:A2)"wb.save("D://textformula.xlsx")

1.10 设置行高和列宽

语法:

sheet.row_dimensions[1].height = 70 设置第1行高70。sheet.column_dimensions[“B”].width = 20 设置B列宽20。注意:设置某一单元格的高和宽会影响整行或者整列。

import openpyxlwb = openpyxl.Workbook()sheet = wb.activesheet["A1"] = "行高70"sheet["B2"] = "列宽20"sheet["C3"] = "高=50 宽=15sheet.row_dimensions[1].height = 70sheet.column_dimensions["B"].width = 20sheet.row_dimensions[3].height = 50sheet.column_dimensions["C"].width =15wb.save("D://texthw.xlsx")

1.11 合并单元格和拆分单元格

语法:

sheet.merge_cells(“A1:D3”) 合并A1到D3的单元格。sheet.unmerge_cells(“A1:D3”) 拆分A1到D3的单元格。

import openpyxlwb = openpyxl.Workbook()sheet = wb.activesheet.merge_cells("A1:D3")# 合并单元格sheet["A1"] = "12个单元格被合并在一起了"sheet.merge_cells("C5:D5")sheet["C5"] = "合并两个单元格"wb.save("D://textmerge.xlsx")

import openpyxlwb = openpyxl.load_workbook("D://textmerge.xlsx")sheet = wb.activesheet.unmerge_cells("A1:D3") # 拆分单元格wb.save("D://textmerge.xlsx")

1.12 冻结窗格

语法:sheet.freeze_panes = “单元格坐标”,即冻结该单元格以上及以左的窗格。注意是以上和以左两个方向。

如冻结属性设置为A2,则无论用户在电子表格中滚动到何处,第1行始终可见(即被冻结)。

如冻结属性设置为B3,则无论用户在电子表格中滚动到何处,前两行和第1列始终可见(即被冻结)。\

import openpyxlimport shutilwb = openpyxl.Workbook()sheet = wb.active# 冻结前两行和前两列sheet.freeze_panes = "C3"wb.save("D://textfreeze.xlsx")

1.13 Excel图表 Charts

OpenPyXL支持使用Excel单元格中的数据创建条形图、折线图、散点图、饼状图等工作图表,需要执行以下操作:

创建图表的数据对象。引入数据对象。创建一个图表元素对象。将数据对象添加到图表元素对象中并设置图表的相关参数。将图表添加到Excel文件中,选择生成的位置。

引入数据对象一般使用Reference()函数,至少传递两个参数:

包含图表数据的Excel页签。该页签下数据的行列信息(最小行和列,最大行和列)。

import openpyxlwb = openpyxl.Workbook()sheet = wb.active# 创建图表需要的数据for i in range(1, 21): sheet["A" + str(i)] = i# 引入数据对象,设置包含图表数据的Excel页签,数据最小行和列,最大行和列refObj = openpyxl.chart.Reference(sheet, min_col=1, min_row=1, max_col=1,max_row=20)seriesObj = openpyxl.chart.Series(refObj, title="First series")# 图例说明# 将数据对象添加到图表元素对象中并设置图表的相关参数,柱状图、标题等chartObj = openpyxl.chart.BarChart()chartObj.title = "My Chart"chartObj.append(seriesObj)# 将图表添加到Excel文件中,选择生成的位置C5sheet.add_chart(chartObj, "C5")wb.save("D://sampleChart.xlsx")

2、Python处理Word(使用docx包)

2.1 安装并引入docx包

在线安装命令:pip install docx

清华镜像安装:pip install -i https://pypi.tuna./simple docx

如下例,安装后引入openpyxl包,执行下例代码在D盘根目录下快速创建一个demo.docx文件,方便后期教学使用(具体代码含义可以不用深究,通过后面学习会逐渐了解掌握相关语法)

import docxdoc = docx.Document()doc.add_paragraph("面朝大海,春暖花开")line2 = doc.add_paragraph("从明天起,")line2.add_run("做一个幸福的人")doc.paragraphs[1].runs[1].bold = Trueline3 = doc.add_paragraph("喂马、")line3.add_run("劈材,")line3.add_run("周游世界")doc.paragraphs[2].runs[0].bold = Truedoc.paragraphs[2].runs[1].italic = Truedoc.paragraphs[2].runs[2].underline= Trueline4 = doc.add_paragraph("从明天起,关心粮食和蔬菜")line5 = doc.add_paragraph("我有一所房子,面朝大海,春暖花开")doc.save("D://demo.docx")

2.2 读取Word文档行数、行内容和段落样式信息

语法:

len(doc.paragraphs) 读取文档总行数。doc.paragraphs[0].text 读取行内容,从0开始计算,固0为第一行,1为第二行。len(doc.paragraphs[1].runs 读取第二行有多少种段落样式。doc.paragraphs[1].runs[0].text 读取第二行第一种样式的内容

import docxdoc = docx.Document("D://demo.docx")print("文档总行数为:",len(doc.paragraphs))print("第一行内容为:",doc.paragraphs[0].text)print("第二行有几种样式:",str(len(doc.paragraphs[1].runs)))print("第二行第二种样式内容为:",doc.paragraphs[1].runs[1].text)d3 = doc.paragraphs[2]print("第三行有几种样式:",str(len(d3.runs)))for i,run in enumerate(d3.runs,1):# 分别输出不同样式的内容print("第%d种样式内容是:[%s]" %(i,run.text))

文档总行数为: 5第一行内容为: 面朝大海,春暖花开第二行有几种样式: 2第二行第二种样式内容为: 做一个幸福的人第三行有几种样式: 3第1种样式内容是:[喂马、]第2种样式内容是:[劈材,]第3种样式内容是:[周游世界]

2.3 输出Word文档全部内容

我们以上面文档为例,循环输出每一行内容,加入 \n 换行符,进行拼接后输出。

import docxdef getWordText(url:"doc file path")->"file text":doc =docx.Document(url)lists =[]for para in doc.paragraphs:lists.append(para.text+"\n")return ("".join(lists))print(getWordText(url="D://demo.docx"))

面朝大海,春暖花开从明天起,做一个幸福的人喂马、劈材,周游世界从明天起,关心粮食和蔬菜我有一所房子,面朝大海,春暖花开

2.4 为Word文档设置不同的段落样式

underline = True 设置下划线

bold = True 设置加粗

italic = True 设置斜体 等等

我们将第四行设置下划线,第五行设置加粗,如下例:

import docxdoc = docx.Document("D://demo.docx")doc.paragraphs[3].runs[0].underline = True # 设置下划线doc.paragraphs[4].runs[0].bold = True # 设置加粗doc.save("D://demo.docx")

2.5 编写Word文档

语法:

doc.add_paragraph 直接添加行内容,或者 paraObj = doc.add_paragraph 添加行内容并返回对象paraObj1,用于后期行内容处理。paraObj.add_run 在行内容后添加新的内容及段落样式。

如下例,我们添加一个标题,再分别添加两行文字,最后为第二行添加新内容和样式。

import docxdoc = docx.Document()doc.add_paragraph("你好 世界", "Title")paraObj1 = doc.add_paragraph("这是正文第一行内容")paraObj2 = doc.add_paragraph("这是正文第二行内容")paraObj2.add_run(",这是第二行添加的内容(加粗显示)")doc.paragraphs[2].runs[1].bold =Truedoc.save("D://addparagraph.docx")

2.6 添加标题

语法:doc.add_heading(“标题内容”, 标题大小)

import docxdoc = docx.Document()doc.add_heading("Header 0", 0)doc.add_heading("Header 1", 1)doc.add_heading("Header 2", 2)doc.add_heading("Header 3", 3)doc.add_heading("Header 4", 4)doc.save("D://addpheader.docx")

2.7 添加分页符

语法:doc.paragraphs[0].runs[0].add_break(docx.enum.text.WD_BREAK.PAGE),在相应的段落加入分页符

import docxdoc = docx.Document()doc.add_paragraph("这是第一页内容")doc.paragraphs[0].runs[0].add_break(docx.enum.text.WD_BREAK.PAGE)# 加入分页符doc.add_paragraph("这是第二页内容")doc.save("D://page.docx")

2.8 添加图片

语法:doc.add_picture(" 图片路径及文件名 ",width=宽度,height=长度)

如下例,我们在网上获取一张图片下载到D盘根目录,然后将其添加到Word文档中。

import docximport requests# 获取网络图片并下载到本地r = requests.get("/v2-520a7ccc637a39f664556ad5d7e090c4_1440w.jpg")r.encoding="utf-8"with open ("D://picture.jpg","wb") as picturefile:picturefile.write(r.content)# 将本地图片添加到文档中doc = docx.Document()doc.add_paragraph("这是一张图片")# 添加图片 设置宽10厘米高5厘米doc.add_picture("D://picture.jpg",width=docx.shared.Cm(10),height=docx.shared.Cm(5))doc.save("D://picture.docx")

*(扩展) 2.9 将Word文档转化为Pdf

我们引入client转化包,设置后台运行及不警告,读取Word文档的绝对地址,按17号进行转化(txt=4, html=10, docx=16,pdf=17)。

from win32com import client as wcword = wc.Dispatch("Word.Application")word.Visible = 0 # 后台运行,不显示word.DisplayAlerts = 0 #不警告doc = word.Documents.Open("D://demo.docx")# 需要写入绝对地址doc.SaveAs("D://demo.pdf", 17) # txt=4, html=10, docx=16, pdf=17doc.Close()word.Quit()

3、课后作业,答案在下一讲

1、创建一个名为《课程》的excel文件,再分别创建《学生表》、《课程表》、《课时数》三个页签,设置《课程表》为当前页签,保存到C盘根目录。

您的代码:

2、打开《课程表》,删除默认《Sheet》页签, 修改《课时数》页签名称为《课时统计》,打开《课程表》页签,设置A1的内容为"我的课程表",要求黑体、20号字、加粗,设置A1行高为30,固定(冻结)第一行,操作完后保存。

您的代码:

3、打开《课程表》,打开《课程表》页签,将[A1:E1]合并,水平居中垂直居中对齐;在第二行循环插入[“星期1”,“星期2”,“星期3”,“星期4”,“星期5”],并设定每一列宽度为15,加粗并水平居中,操作完后保存。

提示:

居中设置需要引入包from openpyxl.styles import Alignment。对单元格A1设置水平及垂直居中的方法:sheet[“A1”].alignment = Alignment(horizontal=“center”, vertical=“center”)。horizontal="center"水平居中,vertical="center"垂直居中。

您的代码:

4、打开《课程表》,打开《课程表》页签,使用append方式逐行填充下方课表内容,内容水平居中,输出最大行数和最大列数,操作完后保存。

您的代码:

*(挑战)5、打开《课时统计》页签,填充以下数据,最后一行为总课时数,将每种课时绘制成饼图在单元格D1输出,操作完后保存。

提示:

引入饼状图相关包 from openpyxl.chart import Reference,PieChart 。pie = PieChart()生成饼状图对象。labels = Reference() 设置标签。datas = Reference() 设置数据。pie.add_data(datas,titles_from_data=True) 填充数据。pie.set_categories(labels) 填充标签。pie.title=" " 设置饼图标题。sheet.add_chart(pie,“D1”) 饼图添加进表格

您的代码:

4、上一讲Python零基础速成班-第13讲-Python正则表达式Regex 课后作业及答案

1、输入一个IP地址,确认是否是合法的A类IP地址。(A类IP地址 地址范围1.0.0.0到126.255.255.255)

import reiptext = input("请输入IP地址:")ipregex = pile(r'(\d{1,3}).(\d{1,3}).(\d{1,3}).(\d{1,3})')ip = ipregex.search(iptext)ip1 = ip.group(1)ip2 = ip.group(2)ip3 = ip.group(3)ip4 = ip.group(4)if 1 <= int(ip1) <= 126 and 0 <= int(ip2) <= 255 and 0 <= int(ip3) <= 255 and 0 <= int(ip4) <= 255:print('IP地址合法')else:print('IP地址不合法')

请输入IP地址:125.9.18.254IP地址合法

2、写一个函数,它使用正则表达式,确保传入的口令字符串是强口令。强口令的定义是:由数字和字母组成,并且要同时含有数字和字母,且长度要在8-16位之间。

import redef strong_password(password):condition=[r'\w{8,16}',r'[a-zA-Z]+',r'\d+']for pattern in condition:pwd=pile(pattern).search(password)if pwd == None:print('口令:%s 格式错误'%password)returnprint('口令格式正确')password=input('请输入口令:\n')strong_password(password)

请输入口令:123abc999v口令格式正确

3、这是一个封群发邮件内容,请你用正则表达式将somebody替换成对应姓名,需要替换的姓名列表为 [‘Alice’,‘Tony’,‘Henry’,‘Jack’,‘Yilia’],替换完成后请依次将内容打印出来,邮件内容为:

Hello somebody ,welcome to my home ,I’m waiting for you.

import renames = ['Alice','Tony','Henry','Jack','Yilia']note = "Hello somebody ,welcome to my home ,I'm waiting for you."noteRegex = pile(r"(?<=Hello )\w+")#以Hello 开头,以","结束的字符串,即为somebodyfor name in names:mo = noteRegex.sub(name,note)print(mo)

Hello Alice ,welcome to my home ,I'm waiting for you.Hello Tony ,welcome to my home ,I'm waiting for you.Hello Henry ,welcome to my home ,I'm waiting for you.Hello Jack ,welcome to my home ,I'm waiting for you.Hello Yilia ,welcome to my home ,I'm waiting for you.

4、将下列不同格式的日期,转换成相同格式yyyy-mm-dd并依次打印出来

输入日期格式有可能如下:

0601

-06-01

/06/01

/6/1

6月1日

06月01日

import redataList = ["0601","-06-01","/06/01","/6/1","6月1日","06月01日"]def add(x)->"补齐月和日位数":if len(x)==1:return "0"+xelse:return xdataRegex = pile(r'(\d{4})\D?(\d{1,2})\D?(\d{1,2})\D?')for data in dataList:d1 = dataRegex.search(data).group(1)d2 = dataRegex.search(data).group(2)d3 = dataRegex.search(data).group(3)print(d1+add(d2)+add(d3))

060106010601060106010601

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。