前言:
而今各位老铁们对“python批量pdf转word”大致比较讲究,看官们都想要了解一些“python批量pdf转word”的相关内容。那么小编同时在网摘上搜集了一些有关“python批量pdf转word””的相关知识,希望大家能喜欢,你们快快来学习一下吧!在工作中经常会遇到将word文件转换为pdf文件的情况,如果文件很少的情况下,可以挨个打开并另存为pdf;如果是成百上千甚至更多的情况下,挨着另存就会耗费大量时间。幸运的是,利用python可以实现word转pdf的批量转换,还可以自定义保存路径以及修改前后缀,下面将简单介绍一个例子,功能不甚完善,缺点是只可以在windows操作系统下运行并且要求安装office套件。
一、首先需要安装pywin32模块。该模块包含了大量的Windows API,通过该模块,可以很方便地从python直接调用word,安装命令如下:
pip install pywin32
二:根据需求编写代码,下面示例有详细注释,可进行参考,根据自身需求进行修改:
from win32com.client import constants, gencache #导入win32com模块中相应函数,用来启动wordfrom os import walkimport osfrom multiprocessing import Pool#对word文件进行转换并保存def d2p(input_file,newName): try: print("------"+input_file+"---Concert Start------") word=gencache.EnsureDispatch('Word.Application') wFile=word.Documents.Open(input_file,ReadOnly=1) #打开word wFile.SaveAs(newName,FileFormat=17) #以pdf格式保存 word.Quit() #退出word print("------"+newName+"---Concert Finished!!!------") except: print("Please make sure that the word application has been successfully installed!!!")#获取所有pdf文件(pdf保存目录、脚本所在目录)def getPFiles(): prePath=os.path.split(os.path.realpath(__file__))[0] #脚本所在目录 pathList=[prePath,pdfPath] pFiles=[] i=0 if not os.path.exists(pdfPath): os.makedirs(pdfPath) #如果要保存pdf的目录不存在则进行创建 else: while i<2: for root,dirs,Files in walk(pathList[i]): for file in Files: if file.endswith(".pdf"): pFiles.append(file) else: pass i+=1 return pFiles #获取脚本执行目录中所有word文件列表(不包含已存在pdf格式的word文件)def getWFiles(pFiles): """ :param pFiles:所有的pdf文件(脚本所在目录的根目录下的pdf文件以及所要保存pdf文件的位置目录下的pdf文件) """ wFiles=[] prePath=os.path.split(os.path.realpath(__file__))[0] for root,dirs,files in walk(prePath): for file in files: if file.endswith('doc') or file.endswith('docx'): if (file.split('.')[0]+'.pdf') not in pFiles: wFiles.append(os.path.join(root,file)) else: pass else: pass return list(set(wFiles))#获取所有的word文件路径以及pdf文件路径def resolvePath(pFiles): """ :param pFiles:所有的pdf文件(脚本所在目录的根目录下的pdf文件以及所要保存pdf文件的位置目录下的pdf文件) """ pAbPath=[] wAbPath=getWFiles(pFiles) i=0 while i<len(wAbPath): #判断修改pdf文件名后的文件是否已经存在,如果存在则把该文件路径从word文件列表中删除 if (getNewName(prefix,suffix,wAbPath[i])) in pFiles: wAbPath.remove(wAbPath[i]) i-=1 else: newFile=getNewName(prefix,suffix,wAbPath[i]) pAbPath.append( os.path.join(pdfPath,newFile)) i+=1 return wAbPath,pAbPath #修改pdf保存路径和名称,前缀和后缀可根据需求修改def getNewName(prefix,suffix,file): """ :param prefix:修改后的pdf文件名前缀,例如原文件名为1,添加前缀?后为?1 :param suffix:修改后的pdf文件名后缀,例如原文件名为1,添加后缀-后为1- :param file:需要保存的修改前pdf文件的完整路径 """ newFile=prefix+file[file.rfind("\\")+1:file.find(".")]+suffix+file[file.rfind("."):] #### newName=newFile.replace(newFile.split('.')[1],'pdf') return newName#脚本main入口pdfPath="C:\\Users\\Administrator\\Desktop\\pdf" #所要保存pdf文件的位置prefix="(2022)豫0122" #修改后的pdf文件名前缀,例如原文件名为1,添加前缀?后为?1suffix="-" #修改后的pdf文件名后缀,例如原文件名为1,添加后缀-后为1-def main(): wAllFiles,pdfFiles=resolvePath(getPFiles()) pools=Pool(3) #定义进程池,最大进程池为3 if wAllFiles!=[]: for i in range(len(wAllFiles)): #调用word转换为pdf方法,并传递参数(异步执行) pools.apply_async(d2p,args=(wAllFiles[i],pdfFiles[i],)) pools.close() #关闭进程池,关闭后pools不再接受新的请求 pools.join() #等待pool进程池的执行完毕 else: print("No file need concert format!!!")if __name__ == '__main__': main()
仅以此作为学习笔记以及分享,如有需改进或者不妥之处,请多多指教。
1+0.01=1.01
1-0.01=0.99
标签: #python批量pdf转word