如何用python自动编写《赤壁赋》文档

前言

苏东坡,千古奇才,大家都喜欢他,叔叔也非常喜欢他,毕竟东坡肉外酥里嫩,肥而不腻,堪称人间极品。
来一句坡哥的词!

大江东去,浪淘尽,千古风流人物

再来!

但愿人长久,千里共婵娟

作为一枚土生土长的海南人,关于海南的诗走起!

我本海南民,寄生西蜀州。忽然跨海去,譬如事远游。

坡哥62岁被贬海南儋州,当时的海南还是蛮荒之地,在宋朝这是比满门抄斩仅轻一等的处罚。
一般人花甲之年遇到这样的事,已经绝望了,但是坡哥不一样,到了海南还是乐观诗意地生活,该吃吃,该喝喝,继续吟诗作乐。
不仅如此,坡哥还在海南办起了学堂,自编讲义,自讲诗书,培养出了海南第一个进士姜唐佐。并且坡哥北归后,他的弟子连续不断的考上了功名,蛮荒之地慢慢绽放出了文化的曙光!
坡哥诗、词、文、书、画,无一不精,有才华也就算了,还有这样积极向上、随遇而安的硬核心态,值得我们每个人学习!

不过比起坡哥,叔叔更喜欢王维,为什么捏?

  1. 大帅哥。迷倒大唐公主。
  2. 专一。这样一个大帅哥,在妻子过世后没有再娶。
  3. 有才华。长得帅专一也就算了,居然写诗、绘画、音乐、书法各种会,妥妥的顶级文艺青年。
    这样一个帅气专一有才的人,试问谁不喜欢呢?

先跑个题,我们来看看王维关于爱情的名句

红豆生南国,春来发几枝。愿君多采撷,此物最相思。

没错了,是心动的感觉!我们再来欣赏一句

空山新雨后,天气晚来秋。

再再来一句

大漠孤烟直,长河落日圆

卧槽!牛逼!

然而坡哥虽然是千古奇才,也有过“十年生死两茫茫,不思量,自难忘”这样的惦念亡妻的名句,但系吧,写完之后继续娶妻纳妾。

回到正题,下面我们用程序来自动创建苏总的《赤壁赋》word文档,并演示提取文字,学会这几招,以后各种自动化处理word文档如有神助~

安装-python-docx

我们需要用到一个python强大的库:python-dox

我们来安装一下

pip instal python-docx

注意:不是安装的docx

简单介绍下原理:pyhton-docx包创建的文档是一个Document对象,然后会在文档上添加各种对象:如段落、行内元素、表格、内容等,文档层级结构类似下面这样

文档-Document
—段落Paragraph
——行内元素Runs
———内容text
———字体font
———颜色color
———字号size
—内容text
—表格tables
——单元格cell
——段落Paragraph

一、自动编写《赤壁赋》

准备数据

name = "赤壁赋"
author = "苏轼"
dynasty = "宋"
paragraphs = [
    '''壬戌之秋,七月既望,苏子与客泛舟游于赤壁之下。清风徐来,水波不兴。举酒属客,诵明月之诗,歌窈窕之章。少焉,月出于东山之上,徘徊于斗牛之间。白露横江,水光接天。纵一苇之所如,凌万顷之茫然。浩浩乎如冯虚御风,而不知其所止;飘飘乎如遗世独立,羽化而登仙。''',
    '''于是饮酒乐甚,扣舷而歌之。歌曰:“桂棹兮兰桨,击空明兮溯流光。渺渺兮于怀,望美人兮天一方。”客有吹洞箫者,倚歌而和之,其声呜呜然:如怨如慕,如泣如诉;余音袅袅,不绝如缕;舞幽壑之潜蛟,泣孤舟之嫠妇苏子愀然,正襟危坐,而问客曰:“何为其然也?”客曰:“月明星稀,乌鹊南飞,此非曹孟德之诗乎?西望夏口,东望武昌。山川相缪,郁乎苍苍;此非孟德之困于周郎者乎?方其破荆州,下江陵,顺流而东也,舳舻千里,旌旗蔽空,酾酒临江,横槊赋诗;固一世之雄也,而今安在哉?况吾与子渔樵于江渚之上,侣鱼虾而友糜鹿,驾一叶之扁舟,举匏樽以相属;寄蜉蝣与天地,渺沧海之一粟。哀吾生之须臾,羡长江之无穷;挟飞仙以遨游,抱明月而长终;知不可乎骤得,托遗响于悲风。”''',
    '''苏子曰:“客亦知夫水与月乎?逝者如斯,而未尝往也;盈虚者如彼,而卒莫消长也。盖将自其变者而观之,而天地曾不能一瞬;自其不变者而观之,则物于我皆无尽也。而又何羡乎?且夫天地之间,物各有主。苟非吾之所有,虽一毫而莫取。惟江上之清风,与山间之明月,耳得之而为声,目遇之而成色。取之无禁,用之不竭。是造物者之无尽藏也,而吾与子之所共适。”''',
    '''客喜而笑,洗盏更酌,肴核既尽,杯盘狼藉。相与枕藉乎舟中,不知东方之既白。'''
]

新建文档

document = Document()
document.styles['Normal'].font.name = u'微软雅黑'
document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), u'微软雅黑')

字里设置了一下字体

添加标题

heading1 = document.add_heading(name, 0)
heading1.alignment = WD_ALIGN_PARAGRAPH.CENTER

这里设置成了居中

添加作者

p = document.add_paragraph("【作者】")
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
run = p.add_run(author)
run.italic = True
run.bold = True

字体居中斜体加粗

添加朝代

p.add_run(" 【朝代】")
run = p.add_run(dynasty)
run.italic = True
run.bold = True

字体也是居中斜体加粗

添加图片

document.add_picture('test.jpeg', width=Inches(2))
last_paragraph = document.paragraphs[-1]
last_paragraph.alignment = WD_ALIGN_PARAGRAPH.CENTER

为了让效果更美观一点,我们整张图片润色一下,图片是这样的

添加段落

for paragraph in paragraphs:
    p = document.add_paragraph(paragraph) # 创建段落对象
    p.paragraph_format.first_line_indent = Inches(0.25)

设置了下首行缩进

保存word文档

document.save(''/Users/chenqionghe/Downloads/赤壁赋.docx'')

大功告成,运行一下

python create-poems.py

看到生成了一个赤壁赋.docx,如下

打开如下

天呐!这也太棒棒了吧~~

下面贴出全部代码

from docx import Document
from docx.shared import Inches
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.oxml.ns import qn

titleName = "赤壁赋"
author = "苏轼"
time = "宋"
paragraphs = [
    '''壬戌之秋,七月既望,苏子与客泛舟游于赤壁之下。清风徐来,水波不兴。举酒属客,诵明月之诗,歌窈窕之章。少焉,月出于东山之上,徘徊于斗牛之间。白露横江,水光接天。纵一苇之所如,凌万顷之茫然。浩浩乎如冯虚御风,而不知其所止;飘飘乎如遗世独立,羽化而登仙。''',
    '''于是饮酒乐甚,扣舷而歌之。歌曰:“桂棹兮兰桨,击空明兮溯流光。渺渺兮于怀,望美人兮天一方。”客有吹洞箫者,倚歌而和之,其声呜呜然:如怨如慕,如泣如诉;余音袅袅,不绝如缕;舞幽壑之潜蛟,泣孤舟之嫠妇苏子愀然,正襟危坐,而问客曰:“何为其然也?”客曰:“月明星稀,乌鹊南飞,此非曹孟德之诗乎?西望夏口,东望武昌。山川相缪,郁乎苍苍;此非孟德之困于周郎者乎?方其破荆州,下江陵,顺流而东也,舳舻千里,旌旗蔽空,酾酒临江,横槊赋诗;固一世之雄也,而今安在哉?况吾与子渔樵于江渚之上,侣鱼虾而友糜鹿,驾一叶之扁舟,举匏樽以相属;寄蜉蝣与天地,渺沧海之一粟。哀吾生之须臾,羡长江之无穷;挟飞仙以遨游,抱明月而长终;知不可乎骤得,托遗响于悲风。”''',
    '''苏子曰:“客亦知夫水与月乎?逝者如斯,而未尝往也;盈虚者如彼,而卒莫消长也。盖将自其变者而观之,而天地曾不能一瞬;自其不变者而观之,则物于我皆无尽也。而又何羡乎?且夫天地之间,物各有主。苟非吾之所有,虽一毫而莫取。惟江上之清风,与山间之明月,耳得之而为声,目遇之而成色。取之无禁,用之不竭。是造物者之无尽藏也,而吾与子之所共适。”''',
    '''客喜而笑,洗盏更酌,肴核既尽,杯盘狼藉。相与枕藉乎舟中,不知东方之既白。'''
]

# 新建文档
document = Document()
document.styles['Normal'].font.name = u'微软雅黑'
document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), u'微软雅黑')
heading1 = document.add_heading('赤壁赋', 0)
heading1.alignment = WD_ALIGN_PARAGRAPH.CENTER

# 添加作者(居中斜体加粗)
p = document.add_paragraph("【作者】")
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
run = p.add_run(author)
run.italic = True
run.bold = True
# 添加朝代(居中斜体加粗)
p.add_run(" 【朝代】")
run = p.add_run(time)
run.italic = True
run.bold = True

# 添加图片(居中)
document.add_picture('test.jpeg', width=Inches(2))
last_paragraph = document.paragraphs[-1]
last_paragraph.alignment = WD_ALIGN_PARAGRAPH.CENTER

# 写下文章(首行缩进)
for paragraph in paragraphs:
    p = document.add_paragraph(paragraph) # 创建段落对象
    p.paragraph_format.first_line_indent = Inches(0.25)

document.save(''/Users/chenqionghe/Downloads/赤壁赋.docx')

二、自动提取《赤壁赋》的文字

既然可以自动编写word文档,我们也可以自动提取word文档。
比如有人给你发了500个文档,你只是想快速根据文字了解一下内容,又不想一个一个打开,这时候就可以用程序自动提取文本啦~

下面演示一下把刚刚生成的文档内容全部弄出来

from docx import Document

# 指定文档路径
docFile = '/Users/chenqionghe/Downloads/赤壁赋.docx'
# 打开文档为Document对象
document = Document(docFile)
# 遍历所有的段落保存到text数组
text = []
for para in document.paragraphs:
    text.append(para.text)
# 打印最终结果
print('
'.join(text))

我们来运行一下,结果如下

哦豁,我们并没有打开介过word文档,但系已经愉快地把词弄出来辽~

以上内容由chenqionghe提供,是不是超级简单呀~
有了这两招,以后想写用程序写啥都可以提示准备好,比如自动生成500首唐诗,又比如一个不打开一堆word文档就把所有的内容提取出来合并成一个文件,
又比自动写作文或自动提取答案啥的,简直不要太嗨~

原文地址:https://www.cnblogs.com/chenqionghe/p/14437229.html