zoukankan      html  css  js  c++  java
  • 如何用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文档就把所有的内容提取出来合并成一个文件,
    又比自动写作文或自动提取答案啥的,简直不要太嗨~

  • 相关阅读:
    5.19 省选模拟赛 T1 小B的棋盘 双指针 性质
    5.15 省选模拟赛 容斥 生成函数 dp
    5.15 省选模拟赛 T1 点分治 FFT
    5.15 牛客挑战赛40 B 小V的序列 关于随机均摊分析 二进制
    luogu P4929 【模板】舞蹈链 DLX
    CF 878E Numbers on the blackboard 并查集 离线 贪心
    5.10 省选模拟赛 拍卖 博弈 dp
    5.12 省选模拟赛 T2 贪心 dp 搜索 差分
    5.10 省选模拟赛 tree 树形dp 逆元
    luogu P6088 [JSOI2015]字符串树 可持久化trie 线段树合并 树链剖分 trie树
  • 原文地址:https://www.cnblogs.com/chenqionghe/p/14437229.html
Copyright © 2011-2022 走看看