友情提示:本文共有 2810 个字,阅读大概需要 6 分钟。
今天想实现一些相对简单的功能,输出word文档内每段前10个字
目的是通过一个实例来学习python。
主要内容如下:
数据类型错误、遍历结构、判断语句,列表及字符串的切片
首先创造一个word文档
慢步用自己昨天发的文章内容吧慢步python,教你怎么通过python编程来修改word文档内标题,点击链接打开文章。
选择文章内容,复制,粘贴到一个新建的word文档中,保存为123.docx,把文件保存到我们当前的项目文件夹里面。(也可以新建一个项目,但不必要)
慢步把新建的123.docx放到昨天建的项目changeheadline文件夹里面。
然后新建一个py,命名为get10words,这样在项目内可以看到一个get10words.py
(对于新建项目及新建py文件有疑问的,可以回看慢步的pycharm的基本操作,创建项目,新建py文件,编写代码及保存)
如上图,在get10words.py里面写入代码:
"""输出word文档每段前10个字符作者:地铁慢步日期:2020-4-8"""from docx import Documentd = Document("123.docx")paragraph_num = len(d.paragraphs)print("123.docx共有段落" + paragraph_num + "段")for p in d.paragraphs:if len(p.text) >= 9:print(p.text[:9])else:print(p.text + "(本段落不足10个字符)")运行代码看看会得到什么样的结果?运行代码的方式如下:
鼠标移动到get10words.py窗口标题,鼠标右键,选择列表中的绿色三角形运行按钮。
果然,写代码都是会出错的。
第2行红色字体,第一个提示是line 8,即代码的第8行 d = Document("123.docx") 在这个程序中出现异常。这个代码主要用于打开文档,慢步考虑异常是最后没有关闭文档。
然后慢步在代码最后加上
d.save("123.docx")嗯,不幸的事情发生了,好像问题不是我想的那样。
发现用慢步弄下来的123.docx,会卡死在打开文档的代码那里,一直提示出错。
只能考虑是慢步把网页格式复制下来了,而python-docx库只能处理word文档的特定格式。即慢步这时的123.docx超出了python-docx库的可处理范围。
那么,只能重新建造一个合格的123.docx
这次只选取部分内容,然后保存为123.docx,都简单些吧。
代码还是那段代码,变的只是123.docx的内容(避免复制到网页格式)
再次运行一下看看。
这次还是出现异常,但显然已经成功打开123.docx文档了。
最后一行红色提示才是问题所在:
TypeError: Can"t convert "int" object to str implicitly
错误类型:无法将“int”(数值类型)对象转换为str(字符串类型)
这是因为
paragraph_num = len(d.paragraphs)
d变量代表123.docx文档,文档的所有段落即d.paragraphs。同时这里的所有段落又可以看成有序的列表,列表的第一项为文档第一段,第二项为第二段……
len()函数获得是长度,属于数值类型数据。 len(文档的段落列表)即得到段落的数目长度。
paragraph_num 在这句代码中会得到123.docx文档的段落数。
这里我们可以用str()函数,把数值转换成字符串。代码更改后如下:
print("123.docx共有段落" + str(paragraph_num) + "段")那现在再来尝试运行吧。
终于,我们得到了结果
这次没有报错,并把我们想要结果显示出来了。
123.docx共有段落5段
大家好,这里是地铁
今天想教大家怎么实
慢步在工作中也有用
现在先实现第一个简
(本段落不足10个字符)
对比慢步的123.docx真实文档内容
实际上,第5段是空格键。
代码的解释
最后来解释一下代码吧。最终代码如下:
"""输出word文档每段前10个字符作者:地铁慢步日期:2020-4-8"""from docx import Documentd = Document("123.docx")paragraph_num = len(d.paragraphs)print("123.docx共有段落" + str(paragraph_num) + "段")for p in d.paragraphs:if len(p.text) >= 9:print(p.text[:9])else:print(p.text + "(本段落不足10个字符)")d.save("123.docx")第一部分三引号
“““
这里是注释,计算机默认无视这部分内容 。注释是给编程人员看的
”””
从上到下
引用docx (指python-docx库)里面的Document功能代码块
打开123.docx,并用d变量表示
把文档段落数目赋值给变量paragraph_num。(赋值号=后面的数据类型决定新变量的数据类型,这里决定paragraph_num是数值变量)
输出段落数
for p in d.paragraphs:
遍历代码块
这个结构称遍历结构,指:对于列表d.paragraphs里面的每一个元素p,都执行遍历代码块。第一次p为列表d.paragraphs里面的第一个元素,第二次p为列表d.paragraphs里面的第二个元素……
if len(p.text) >= 9:print(p.text[:9])else:print(p.text + "(本段落不足10个字符)")这里是判断语句/判断结构
如果 段落p的文本长度大于或等于9,即条件成立,执行代码print(p.text[:9]),否则执行else:后面的代码print(p.text + "(本段落不足10个字符)")。
p.text就是段落的文本内容,指一个段落的所有文字,也可以当成一个文字列表,第一个字就是文字列表的第一个元素。这里有个“切片”概念。p.text[:9]和p.text[0:9]相同,0和9是列表的索引,0索引指向第一个元素,9索引指向第10个元素。但是[0:9]指向的内容,由索引0开始,但不会到达索引9,即第1到第9个元素,但不包括第10个元素。
嗯,慢步这时候又发现了自己写的代码的bug。因为这里只把段落内容切出了9个字符串。大家可以把9改成10。
最后一行代码,就是保存为123.docx。因为我们并没有对文档做出改变,所以保存也没有什么提示。
记得在运行这个程序时,把打开的123.docx关闭,否则会提示异常。
暂时写到这里吧,内容也算挺多了。写完就又过0点了。
慢步python,陪你在python学习上慢慢进步好了。
本文如果对你有帮助,请点赞收藏《慢步Python:输出word文档内每段前10个字 在编写中学习知识点》,同时在此感谢原作者。