大数跨境
0
0

人生苦短,我用Python处理文本

人生苦短,我用Python处理文本 数据皮皮侠
2019-10-23
1
导读:在我们的日常生活中经常会和PDF文件打交道,包括但不限于读取、合并、拆分、加密。而平时最令我们头疼的操作就是拆分PDF了!但我最近发现了一个神器——PyPDF2包,用它就可以在Python中处理已先存

本期导读

python处理文本

Oct.24

2019

01

PyPDF2介绍


02

安装PyPDF2


03

拆分PDF


04

程序运行


05

合并文档

 
 


在我们的日常生活中经常会和PDF文件打交道,包括但不限于读取、合并、拆分、加密。而平时最令我们头疼的一种操作就是拆分PDF了,毕竟小则十几页、大则上千页,太累了!但我最近发现了一个神器——PyPDF2包,用它就可以在Python中处理已先存在的PDF哦。真是“人生苦短,我用python!”。



一、PyPDF2介绍


最初的pyPdf软件包于2005年发布。pyPdf的最后一个正式版本是在2010年。大约一年后,一家名为Phasit的公司赞助了一个名为PyPDF2的pyPdf分支。该代码编写为向后与原始代码兼容,并且用了好多年,效果一直很好,其最后一个版本是在2016年。


虽然PyPDF2已经很久没有维护了,但是它的功能可一点都不落后,它可以支持提取PDF中的文档信息、旋转页面、合并PDF、拆分PDF、添加水印、加密PDF等功能哦。



二、安装PyPDF2


由于我是使用的Pycharm进行的Python编译,所以自带PyPDF2包,只需要在使用的时候导入就ok,不过如果你是用的其他编译器,那么你也可以通过pip进行安装(直接命令运行pip install PyPDF2)。下面我将演示如何用Pycharm导入PyPDF2包。


1 打开Pycharm



2 点击菜单上的File,选择Other Settings里的Preferences for New Pro...



3 选择对应的python程序



4 点击左下角的➕,输入你想要的包,就可以导入啦!





三、拆分PDF


那我们现在来思考一下拆分PDF需要哪些步骤?读取PDF,确定有多少页;明确自己的需求,需要拆分成多少页;创建新的空白PDF;提取指定页数的PDF内容写入新建的中PDF文件中;保存并重新命名。


不过以上步骤看起来很简单,但是还是有些地方值得商榷的,比如如果拆分的页码范围(如果不是整倍数怎么办)该如何计数呢?


在这里我选择使用拆分列表的方法来进行计数:将总页码生成一个大列表,再利用切片的方法将这个列表拆分成多个小列表,之后每个拆分的pdf页码范围就是每个小列表第一个数--最后一个数+1。


代码:


#! python# PDFCF.py - pdf文件拆分程序import PyPDF2   # import PyPDF2模块pdfReader = PyPDF2.PdfFileReader('Math.pdf')  # 打开一个可读的pdf对象pdfnums = pdfReader.numPages  # 获取pdf总页数pagenum_list = list(range(pdfnums))  # 将总页码循环到一个列表中n = 20  # 将总页码按照指定的个数分为多个小列表page_list = [pagenum_list[i:i + n] for i in range(0, len(pagenum_list), n)]for i in range(len(page_list)):  pdfWriter = PyPDF2.PdfFileWriter()   # 创建一个空白的pdf  for pageNum in range(page_list[i][1], page_list[i][-1] + 1):    # 提取指定页面    pageObj = pdfReader.getPage(pageNum)    pdfWriter.addPage(pageObj)  with open('PDFREAD %s' % i + '.pdf', 'wb') as pdfOutputFile:    pdfWriter.write(pdfOutputFile)



四、程序运行


将程序和PDF文件放在同一个文件夹内,运行程序,就可以得到你想要的结果啦!下图是动图演示过程:





五、合并文档


那如果我们想要合并PDF文档,又该怎么办呢?


代码:


#! python# PDFCF.py - pdf文件合并程序from PyPDF2 import PdfFileReader, PdfFileWriterreadFile = 'read.pdf'writeFile = 'write.pdf'# 获取一个 PdfFileReader 工具pdfReader = PdfFileReader(open(readFile, 'rb'))# 获取 PDF 的页数pageCount = pdfReader.getNumPages()print(pageCount)# 返回一个 PageObjectpage = pdfReader.getPage(i)# 获取一个 PdfFileWriter 工具pdfWriter = PdfFileWriter()# 将一个 PageObject 插手到 PdfFileWriter 中pdfWriter.addPage(page)# 输出到文件中pdfWriter.write(open(writeFile, 'wb'))


这是一段合并两个PDF文档的代码,通过和上段代码进行对比,我们可以发现其大体思路是相反的,但也较为简单。


不过我们该如何合并多个文件呢?难道要一个一个输入文件名吗?希望大家可以思考这个问题(提示:可以考虑列表)。最后温馨提示:大家在写程序的时候应该尽量先想思路、理清思路,磨刀不误砍柴工嘛。

作者有话说:

本期作者:王宇茜

本期编辑校对:李嘉楠


关注“ 数据皮皮侠 ”

更多知识等你发现


【声明】内容源于网络
0
0
数据皮皮侠
社科数据综合服务中心,立志服务百千万社科学者
内容 2137
粉丝 0
数据皮皮侠 社科数据综合服务中心,立志服务百千万社科学者
总阅读2.6k
粉丝0
内容2.1k