python 合并 循环list_人生苦短,我用Python处理文本

8b6de9d97b4fc4231f026cb581b4c16f.png

本期导读

python处理文本

Oct.24

2019

01

PyPDF2介绍

02

安装PyPDF2

03

拆分PDF

04

程序运行

05

合并文档

 
  e48979793d3c898b18e41f517586af5d.gif

在我们的日常生活中经常会和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

75fe1bbe69e982f84b872baa5960e3c3.png

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

0fa86422ca787954d510820488307474.png

3 选择对应的python程序

ffb88edb4f76a424e820fb2db468977c.png

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

f711169bb2eb00e50904120e61bd3712.png

三、拆分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文件放在同一个文件夹内,运行程序,就可以得到你想要的结果啦!下图是动图演示过程:

de985edad223bfbf77aef70c4b804dda.gif

五、合并文档

那如果我们想要合并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文档的代码,通过和上段代码进行对比,我们可以发现其大体思路是相反的,但也较为简单。

e48979793d3c898b18e41f517586af5d.gif

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

作者有话说:

3b6abdaeb8c36a88a051b6d4f7fca3f8.png e48979793d3c898b18e41f517586af5d.gif

本期作者:王宇茜

本期编辑校对:李嘉楠

关注“ 数据皮皮侠 ”

更多知识等你发现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值