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

  • 相关阅读:
    PHP小技巧
    PHP Ajax跨域解决
    单点登录
    Linux 常用命令
    php面向对象--继承
    vueDemo
    vueSource
    vuex
    Vue.js
    关于前后端分离
  • 原文地址:https://www.cnblogs.com/chenqionghe/p/14437229.html
Copyright © 2011-2022 走看看