赞
踩
目录
使用python抽取PDF、WORD文档中文字进行为TXT文件。
Python3.5.3,系统环境:win10,办公软件office16,编程环境:pycharm+Anaconda3
插件:win32com、os、fnmatch(都可以从Anaconda中安装,这里不演示插件安装了)
选用免费工具和自己写代码工具的不同点:
word-txt
- # coding=utf-8
- '''
- author;Rocky
- Description:Word文档信息提取转存TXT
- prompt: code in python3 env
- function:word文档转存TXT,默认保存在运行环境下面,支持重定义。
- 参数描述:1、filePath 文件路径。2、savePath:保存路径
- '''
- import os,fnmatch
- from win32com import client as wc
- from win32com.client import Dispatch
-
- def word2Txt(filePath,savaPath=''):
- #1、切分文件路径为文件目录和文件名
- dirs,filename = os.path.split(filePath)
- print('输入文档的当前路径和文件名字:',dirs,'\n',filename)
-
- #2、修改切分后的文件后缀
- new_name=''
- if fnmatch.fnmatch(filename,'*.doc'):
- new_name = filename[:-4]+'.txt'
- elif fnmatch.fnmatch(filename,'*.docx'):
- new_name = filename[:-5]+'.txt'
- else:
- print('格式不正确,仅支持doc和docx格式')
- return
-
- #3、设置新的文件保存路径
- if savaPath=='':
- savaPath = dirs
- else:
- savaPath = savaPath
- word2TxtPath = os.path.join(savaPath,new_name)
- print('转化以后的文件名路径-->',word2TxtPath)
-
- #4、加载文本提取的处理程序,Word - txt
- wordapp = wc.Dispatch('Word.Application')
- mytxt = wordapp.Documents.Open(filePath)
-
-
- #5、保存文档文本
- mytxt.SaveAs(word2TxtPath,4)
- mytxt.Close()
- print('转化成功,文件保存为txt文件')
-
-
- if __name__=='__main__':
- filePath = os.path.abspath(r'./1234.docx')#读取项目路径的文档。
- word2Txt(filePath)
pdf-txt
- # coding=utf-8
- '''
- author;Rocky
- Description:pdf,PDF文档信息提取转存TXT
- prompt: code in python3 env
- function:文档信息转存TXT,默认保存在运行环境下面,支持重定义。
- 参数描述:1、filePath 文件路径。2、savePath:保存路径、
- '''
- import os,fnmatch
- from win32com import client as wc
- from win32com.client import Dispatch
-
- def pdf2Txt(filePath,savaPath=''):
- #1、切分文件路径为文件目录和文件名
- dirs,filename = os.path.split(filePath)
- print('输入文档的当前路径和文件名字:',dirs,'\n',filename)
-
- #2、修改切分后的文件后缀
- new_name=''
- if fnmatch.fnmatch(filename,'*.pdf'):
- new_name = filename[:-4]+'.txt'
- elif fnmatch.fnmatch(filename,'*.PDF'):
- new_name = filename[:-4]+'.txt'
- else:
- print('格式不正确,仅支持pdf和PDF格式')
- return
-
- #3、设置新的文件保存路径
- if savaPath=='':
- savaPath = dirs
- else:
- savaPath = savaPath
- pdf2TxtPath = os.path.join(savaPath,new_name)
- print('转化以后的文件名路径-->',pdf2TxtPath)
-
- #4、加载文本提取的处理程序,Word - txt
- wordapp = wc.Dispatch('Word.Application')
- mytxt = wordapp.Documents.Open(filePath)
-
- #5、保存文档文本
- mytxt.SaveAs(pdf2TxtPath,4)
- mytxt.Close()
- print('转化成功,文件保存为txt文件')
-
-
- if __name__=='__main__':
- filePath = os.path.abspath(r'./erp.pdf')#当前项目文档下的路径
- pdf2Txt(filePath)
封装Word\pdf-txt的工具
- # coding=utf-8
- '''
- author;Rocky
- Description:文档信息提取转存TXT(PDF、word文档)
- prompt: code in python3 env
- function:PDF、pdf、doc、docx文档转存TXT,默认保存在运行环境下面,支持重定义。
- 参数描述:1、filePath 文件路径。2、savePath:保存路径 3、filename 文件名字 4、typename文件后缀
- '''
- import os,fnmatch
- from win32com import client as wc
- from win32com.client import Dispatch
-
- def file2Txt(filePath,savaPath=''):
- try:
- #1、切分文件路径为文件目录和文件名
- dirs,filename = os.path.split(filePath)
- print('输入文档的当前路径和文件名字:',dirs,'\n',filename)
-
- #2、修改切分后的文件后缀
- typename = os.path.splitext(filename)[-1].lower()#获得文件后缀
- new_name = trantype(filename,typename)
-
- #3、设置新的文件保存路径
- if savaPath=='':
- savaPath = dirs
- else:
- savaPath = savaPath
- file2TxtPath = os.path.join(savaPath,new_name)
- print('转化以后的文件名路径-->',file2TxtPath)
-
- #4、加载文本提取的处理程序,Word、PDF - txt
- wordapp = wc.Dispatch('Word.Application')
- mytxt = wordapp.Documents.Open(filePath)
-
- #5、保存文档文本
- mytxt.SaveAs(file2TxtPath ,4)
- mytxt.Close()
- print('转化成功,文件保存为txt文件')
- except Exception as e :
- pass
-
- #6、定义函数,重命名文件名字
- def trantype(filename,typename):
- new_name=''
- if typename == '.pdf':
- if fnmatch.fnmatch(filename,'*.pdf'):
- new_name = filename[:-4] + '.txt'
- else: return
- elif typename == '.doc' or typename == '.docx':
- if fnmatch.fnmatch(filename,'*.doc') :
- new_name = filename[:-4] + '.txt'
- elif fnmatch.fnmatch(filename, '*docx'):
- new_name = filename[:-5] + '.txt'
- else:return
- else:
- print('警告:\n 您输入的文件不合法,本程序抽取doc,docx,pdf,PDF程序文件,请输入正确格式')
- return
- return new_name
-
-
- if __name__=='__main__':
- filePath = os.path.abspath(r'./1234.docx')
- file2Txt(filePath)
遍历文档,读取文件件中文档信息
- # coding=utf-8
- '''
- author;Rocky
- Description:遍历文档,打印文档的名字
- prompt: code in python3 env
- function:将文档里面的文档名字打印出来,并计算所有需要时间。默认保存在运行环境下面,支持重定义。
- 参数描述:1、time_start 开始时间。2、time_end 结束时间 3、 rootDir目录文件
- '''
- import os,fnmatch
- from win32com import client as wc
- from win32com.client import Dispatch
- import time
-
- class TraversalFun():
- #1、初始化,rootdir目录文件路径
- def __init__(self,rootDir):
- self.rootDir = rootDir
-
- #2、遍历目录文件
- def TraversalDir(self):
- TraversalFun.AllFiles(self, self.rootDir)
-
- #3、递归算法遍历所有文件,并打印文件名
- def AllFiles(self,rootDir):
- for lists in os.listdir(rootDir):
- path = os.path.join(rootDir,lists)
- if os.path.isfile(path):
- print(os.path.abspath(path))
- elif os.path.isdir(path):
- TraversalFun.AllFiles(self,path)
-
- if __name__ == '__main__':
- time_start = time.time()
- rootDir = r"../2010"
- tra = TraversalFun(rootDir)
- tra.TraversalDir()
- time_end = time.time()
- print('totally cost:',(time_end - time_start),'s')
遍历整个文档,将pdf,word-txt保存
- # coding=utf-8
- '''
- author;Rocky
- Description:抽取文档中的word,pdf文档中的文字,转化为TXT保存。
- prompt: code in python3 env
- function:将文档里面的文档名字打印出来,并计算所有需要时间。默认保存在运行环境下面,支持重定义。
- 参数描述: 1、filePath 文件路径。2、savePath:保存路径 3、filename 文件名字 4、typename文件后缀 ,5、time_start 开始时间。6、time_end 结束时间 7、 rootDir目录文件
- '''
- import os,fnmatch
- from win32com import client as wc
- from win32com.client import Dispatch
- import time
- import ExtractTxt as ET #提取PDF、word文档的功能模块
-
- class TraversalFun():
- #1、初始化,rootdir目录文件路径
- def __init__(self,rootDir,func=None,saveDir=''):
- self.rootDir = rootDir#目标文件路径
- self.func = func#参数方法,实现文本抽取
- self.saveDir = saveDir#文件夹保存路径
-
- #2、遍历目录文件
- def TraversalDir(self):
- #切分文件目录和文件名
- dirs,filename=os.path.split(self.rootDir)
- #保存目录
- saveDir=""
- if self.saveDir=="":
- save_dir = os.path.abspath(os.path.join(dirs,'new_',filename))
- else: save_dir = self.saveDir
- #创建保存路径
- if not os.path.exists(save_dir):
- os.makedirs(save_dir)
- print("保存目录:\n",save_dir)
-
- #遍历文件抽取Txt文本内容
- TraversalFun.AllFiles(self, self.rootDir,save_dir)
-
- #3、递归算法遍历所有文件,并打印文件名(并非目录文件)
- def AllFiles(self,rootDir,save_dir=''):
- #获取根目录下面所有文件
- for lists in os.listdir(rootDir):
- path = os.path.join(rootDir,lists)
- #核心算法,对文件的类型文本进行信息抽取并保存
- if os.path.isfile(path):
- self.func(os.path.abspath(path),os.path.abspath(save_dir))
- #递归遍历整个目录
- if os.path.isdir(path):
- newsave_dir = os.path.join(save_dir,lists)
- if not os.path.exists(newsave_dir):
- os.mkdir(newsave_dir)
- TraversalFun.AllFiles(self,path,newsave_dir)
-
- if __name__ == '__main__':
- time_start = time.time()
- rootDir = os.path.abspath(r'../2010')
- tra = TraversalFun(rootDir,ET.file2Txt)#调用ET的file2Txt的方法
- tra.TraversalDir()
-
- time_end = time.time()
- print('totally cost:',(time_end - time_start),'s')
注意:调用项目中的ExtractTxt模块时,需要重新加载标记目录为源根文件夹。才可以使用封装的python写的模块(图片是标记后的截图) 其次转化过程中,word文档会提醒是否将文档转化,需要点击确定。
总结:win32插件实际使用python的office模块进行调用,将文档转化为txt文件。使用os模块读取文件路径进行写入。注意模块之间封装使用,可以调用加入新的代码段中。
特别感谢网友文章参考:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。