版权声明:本文为博主原创文章,转载 请注明出处:https://blog.csdn.net/sc2079/article/details/101055192

- 写在前面




  最近想练习英语,发现电脑磁盘中有很多流利阅读的资料,文件夹格式为:流利阅读201X年>X月>0101 2019 年度色发布:活力珊瑚橘>mp3、word。由于个人想整合下文章(仅新闻正文),方便打印。手动整理了几篇,发现挺耗时的。因此便想写个脚本,自动化操作。

- 环境配置安装


​ ​
  运行环境:Python3.6、Spyder

​
  依赖模块:win32com、python-docx等

- 开始工作


1.新闻正文获取

  一篇流利阅读文章结构有五个部分:今日导读、带着问题听讲解、新闻正文、重点词汇、拓展内容。我的目标就是提取每篇文章的新闻正文,具体方式是寻找到新闻正文开始与结束的段落,即可通过查找“新闻正文”,“重点词汇”可以得到


  代码如下:

def getText(file):
doc=docx.Document(file)
start=0 #正文开始点
end=0 #正文开始点
state=1 #读取状态,1为成功,0为失败
for i in range(len(doc.paragraphs)):
if re.search('新闻正文',doc.paragraphs[i].text):
start=i
if re.search('重点词汇',doc.paragraphs[i].text):
end=i
if start==0 or end==0:
state=0
if state==1:
fullText = []
for j in range(end-start):
pa=doc.paragraphs[start+j+1].text.strip('重点词汇')
fullText.append(pa)
else:
print(filename+': read failure!!!')
return '\n'.join(fullText)

  这里还有一个问题就是有些文章的格式是doc,由于python-docx仅支持docx,因此这里需要对doc文档进行转化成docx。即有:

    try:
doc=docx.Document(file)
except: #doc转docx
word = wc.Dispatch("Word.Application")
doc = word.Documents.Open(file)
(file_path, tempfilename) = os.path.split(file)
(filename, extension) = os.path.splitext(tempfilename)
#print(filename)
file=file_path+filename+'.docx'
doc.SaveAs(file, 12) #12为docx
doc.Close()
doc=docx.Document(file)

2.文件名获取

  我这里主要保存了文件名及其相应的文件地址。

#文件目录
path=''
titles1=os.listdir(path)
files=[]
files_name=[]
for title1 in titles1:
titles2=os.listdir(path+'//'+title1)
for title2 in titles2:
titles3=os.listdir(path+'//'+title1+'//'+title2)
for title3 in titles3:
if re.search('doc',os.path.splitext(title3)[1]):
file=path+'//'+title1+'//'+title2+'//'+title3
files.append(file)
files_name.append(title2)
continue

3.定位整合

  由于我不想一次性打印这么多的文章,便想定位定数整合。

split=10  #文章数
where=10 #起始
new_doc=docx.Document()
for j in range(split):
try:
text=getText(files[j+where])
new_doc.add_heading(files_name[j+where], 2)
print(text) new_doc.add_paragraph(text)
except:
pass
new_doc.styles['Normal'].font.name = 'Times New Roman' #西文字体
new_doc.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), u'微软雅黑')#中文字体
new_doc.save('xx//流利阅读2019_'+str(where+1)+'_'+str(j+where)+'.docx')

- 结果展示


-写在最后


  因本人能力有限且时间不足,所写的脚本简陋且冗杂(嗯,能满足我暂时需求就OK),望请多多包涵与指正。

  另写这篇博客的初衷是分享关于word操作的一些实例,希望对你有所帮助。

  PS:本文所提及的XX阅读仅供个人学习使用,不进行网络传播,本人概不负相关法律责任。

某阅读多word整理自动化脚本的更多相关文章

  1. Jmeter 接口自动化-脚本数据分离实例

    一. 背景:  为了让大家更加的了解Jmeter,并且使用起来游刃有余.这篇我们主要讲一下,如何优雅的使用Jmeter一步步的实现接口自动化,完成脚本与数据分离,把可能对Jmeter脚本的维护转移到c ...

  2. 《手把手教你》系列基础篇(五)-java+ selenium自动化测试- 创建首个自动化脚本(详细教程)

    1.简介 前面几篇宏哥介绍了两种(java和maven)环境搭建和三大浏览器的启动方法,这篇文章宏哥将要介绍第一个自动化测试脚本.前边环境都搭建成功了,浏览器也驱动成功了,那么我们不着急学习其他内容, ...

  3. Linux系统LVM逻辑卷创建过程以及自动化脚本

    转至:https://cloud.tencent.com/developer/article/1068328 Linux系统LVM逻辑卷创建过程以及自动化脚本 2018-03-21阅读 6300   ...

  4. 自动化脚本中click()或sendKeys()没有反应

    前提: 排除xpath引用错误或元素的xpath每次都不同的情形. 问题描述 自动化脚本中click()方法和sendKeys()方法报错, 返回异常InvocationTargetException ...

  5. appium-desktop录制脚本二次开发,生成我司自动化脚本

    目的 通过对appium-desktop脚本录制功能进行二次开发,使录制的java脚本符合我司自动化框架要求. 实现步骤 1.增加元素名称的输入框 由于ATK(我司自动化测试框架)脚本中元素是以“ap ...

  6. Jenkins构建自动化脚本执行无界面解决方法

    场景: jenkins构建selenium自动化用例的时候,会有jenkins自带服务后台运行自动化脚本,可无界面运行IE.Chrome.Firefox. 然而运行IE浏览器时候(IE比较特殊),Je ...

  7. 【Zabbix】Zabbix-agent自动化脚本

    zabbix-agent自动化脚本 作用:批量部署zabbix-agent.用于上百台虚拟机都可以被Zabbix监控. 脚本名:inst-agent.sh #!/bin/bash echo " ...

  8. 论文阅读笔记 Word Embeddings A Survey

    论文阅读笔记 Word Embeddings A Survey 收获 Word Embedding 的定义 dense, distributed, fixed-length word vectors, ...

  9. PHP学习日记 Windows配置PHP+Nginx+自动化脚本

    Windows配置PHP+Nginx+自动化脚本 安装与配置 PHP 下载PHP:传送门 选择合适的版本下载 尽量选Thread Safe 配置PHP: 解压后在文件夹中找到php.ini-devel ...

随机推荐

  1. 【Leetcode_easy】860. Lemonade Change

    problem 860. Lemonade Change solution class Solution { public: bool lemonadeChange(vector<int> ...

  2. AWS 身份及验证服务(四)

    IAM 概述 集中管理访问AWS资源的访问权限和用户身份认证 支持联合访问管理,支持LADP第三方服务 (Identity Provider) 是非区域相关的服务,全局有效 创建用户.组和角色以应用策 ...

  3. Actor模型的状态(State)+行为(Behavior)+邮箱(Mailbox)

    状态(State)+行为(Behavior)+邮箱(Mailbox) 基于Actor模型的CQRS.ES解决方案分享 开场白 大家晚上好,我是郑承良,跟大家分享的话题是<基于Actor模型的CQ ...

  4. 使用redis调用lua脚本的方式对接口进行限流

    java端实现: //初始化一个redis可执行的lua DefaultRedisScript<List> defaultRedisScript = new DefaultRedisScr ...

  5. Nio学习笔记(大部分网上摘抄)

    Nio与IO的区别 原有的 IO 是面向流的.阻塞的,NIO 则是面向块的.非阻塞的. 1.IO流每次从流中读一个或多个字节,直至读完所有字节,他们没有被缓存在其他地方,并且,IO流不能移动流中的数据 ...

  6. 关于Python编码这一篇文章就够了

    概述 在使用Python或者其他的编程语言,都会多多少少遇到编码错误,处理起来非常痛苦.在Stack Overflow和其他的编程问答网站上,UnicodeDecodeError和UnicodeEnc ...

  7. a+b的问题

    题目描述: 给定两个整数 a, b (a, b 均不超过 int 类型的表示范围),求出 a + b 的和. 输入描述: 每行输入两个整数 a 和 b,用空格隔开. 输出描述: a + b 的值. 样 ...

  8. C++_向函数传递对象

    向函数传递对象 1. 使用对象作为函数参数 对象可以作为参数传递给函数,其方法与传递其他类型的数据相同. 在向函数传递对象时,是通过传值调用传递给函数的. 因此,函数中对对象的任何修改均不影响调用该函 ...

  9. 使用Docker搭建svn服务器教程

    svn简介 SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS.CVS,它采用了分支管理系统,它的设计目标就是取代CVS.互联网上很多版本控制服务已从CVS迁移到Subv ...

  10. 静态成员函数和(CPP与C结构体的区别)

    #include <iostream> using namespace std.; //这种写法只是CPP中的struct的用法,但是在C中还是不支持的. //C中的结构体不支持写方法的. ...