如何用python自动编写《赤壁赋》word文档
前言
苏东坡,千古奇才,大家都喜欢他。叔叔也非常喜欢他,毕竟东坡肉外酥里嫩,肥而不腻,堪称人间极品。
不过,比起苏东坡,叔叔更喜欢王维
- 大帅哥。迷倒大唐公主
- 专一。这样一个大帅哥,在妻子过世后没有再娶
- 有才华。写诗、绘画、音乐、书法各种会,妥妥的顶级文艺青年。
这样一个帅气专一有才的人,试问谁不喜欢呢?
先跑个题,我们来看看王维爱情的名句
红豆生南国,春来发几枝。愿君多采撷,此物最相思。
没错了,是心动的感觉!我们再来欣赏一句
大漠孤烟直,长河落日圆。
再再来一句
大漠孤烟直,长河落日圆
卧槽!牛逼
然而苏东坡虽然是奇才,也有过苏“十年生死两茫茫,不思量,自难忘”这样的思念亡妻名句,但是写完之后继续娶妻纳妾。
回到正题,下面我们程序来自动创建苏总的《赤壁赋》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('\n'.join(text))
我们来运行一下,结果如下

哦豁,我们并没有打开介过word文档,但系已经愉快地把词弄出来辽~
以上内容由chenqionghe提供,是不是超级简单呀~
有了这两张,以后想写用程序写啥都可以提示准备好,比如自动生成500首唐诗或作文,又比如一个不打开一堆word文档就把所有的内容提取出来合并成一个文件,
又比自动写作文或自动提取答案啥的,简单不要太嗨~
如何用python自动编写《赤壁赋》word文档的更多相关文章
- 自动生成并导出word文档
今天很荣幸又破解一现实难题:自动生成并导出word文档 先看页面效果: word效果: 代码: 先搭建struts2项目 创建action,并在struts.xml完成注册 <?xml vers ...
- python 使用win32com实现对word文档批量替换页眉页脚
最近由于工作需要,需要将70个word文件的页眉页脚全部进行修改,在想到这个无聊/重复/没有任何技术含量的工作时,我的内心是相当奔溃的.就在我接近奔溃的时候我突然想到完全可以用python脚本来实现这 ...
- Python读取word文档内容
1,利用python读取纯文字的word文档,读取段落和段落里的文字. 先读取段落,代码如下: 1 ''' 2 #利用python读取word文档,先读取段落 3 ''' 4 #导入所需库 5 fro ...
- C# : 操作Word文件的API - (将C# source中的xml注释转换成word文档)
这篇博客将要讨论的是关于: 如何从C#的source以及注释, 生成一份Word格式的关于各个类,函数以及成员变量的说明文档. 他的大背景如下...... 最近的一个项目使用C#, 分N个模块, 在项 ...
- 利用Python-docx 读写 Word 文档中的正文、表格、段落、字体等
前言: 前两篇博客介绍了 Python 的 docx 模块对 Word 文档的写操作,这篇博客将介绍如何用 docx 模块读取已有 Word 文档中的信息. 本篇博客主要内容有: 1.获取文档的章节信 ...
- C# 复制一个Word文档的部分或全部内容到另一个Word文档
C# 复制一个Word文档的部分或全部内容到另一个Word文档 我最近喜欢折腾Office软件相关的东西,想把很多Office软件提供的功能用.NET来实现,如果后期能把它用来开发一点我自己的小应用程 ...
- JAVA:借用OpenOffice将上传的Word文档转换成Html格式
为什么会想起来将上传的word文档转换成html格式呢?设想,如果一个系统需要发布在页面的文章都是来自word文档,一般会执行下面的流程:使用word打开文档,Ctrl+A,进入发布文章页面,Ctrl ...
- OpenOffice Word文档转换成Html格式
为什么会想起来将上传的word文档转换成html格式呢?设想,如果一个系统需要发布在页面的文章都是来自word文档,一般会执行下面的流程:使用word打开文档,Ctrl+A,进入发布文章页面,Ctrl ...
- Python处理PDF和Word文档常用的方法(二)
Python处理word时,需要安装和导入python-docx模块. 安装命令:pip install python-docx 导入命令:import docx 编码编写顺序:用docx.Docum ...
随机推荐
- CentOS7.X安装英伟达显卡采坑之路
1.系统信息 操作系统版本:CentOS7.X 显卡版本:英伟达 Tesla P100 其他软件包安装信息: CUDA 9.0 CUDNN 7.4.2.24 lightgbm 2.2.X Boost ...
- Effective Java读书笔记--对所有对象都通用的方法
1.覆盖equals请遵守通用规定.不需要覆写equals的场景:a.类的每个实例都是唯一的.b.类不需要提供"逻辑相等"的测试功能.c.超类已经覆盖了equals的方法.d.类是 ...
- 1155 Heap Paths
题干前半略. Sample Input 1: 8 98 72 86 60 65 12 23 50 Sample Output 1: 98 86 23 98 86 12 98 72 65 98 72 ...
- P1091 合唱队形(LIS)
题目描述 NNN位同学站成一排,音乐老师要请其中的(N−KN-KN−K)位同学出列,使得剩下的KKK位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2,-,K1,2, ...
- poj1821——Fence
题意: 一个栅栏一共有n(从1--n)个木板,我们找k个工人去粉刷它,li表示每个人有限制粉刷木板数量,pi表示粉刷一个木板得到的钱,si表示他开始在那个木板前面 如果一个工人要粉刷,那么他必须粉刷s ...
- Codeforces Round #644 (Div. 3) D. Buying Shovels (数学)
题意:商店里有\(k\)个包裹,第\(i\)个包裹中含有\(i\)个物品,现在想要买\(n\)物品,你可以选择某一个包裹购买任意次,使得物品数刚好等于\(n\),求最少的购买次数. 题解:首先,假如\ ...
- UVA 10480 Sabotage (最大流) 最小割边
题目 题意: 编写一个程序,给定一个网络规范和破坏每个连接的成本,确定要切断哪个连接,以便将首都和最大的城市分离到尽可能低的成本. 分割-------------------------------- ...
- CF1462-E2. Close Tuples (hard version)
本题为hard版,还有一个easy版,区别在于k和m的取值不同. 题意: 给出一个由n个数字组成的数组 \(a\).现在定义一种子集为\(\{A_1, A_2, A_3, ..., A_m\}\),使 ...
- Seq2Seq原理详解
一.Seq2Seq简介 seq2seq 是一个Encoder–Decoder 结构的网络,它的输入是一个序列,输出也是一个序列.Encoder 中将一个可变长度的信号序列变为固定长度的向量表达,Dec ...
- github 无法访问
描述: 1. ping 丢失 100% 2. git 失败 Failed to connect to github.com port 443: Timed out 3.打开网站 超时 解决: http ...