1.项目要求
假如你手里有好几个pdf文档,无聊的你想要将这些文档的内容合并在一起,生成一个新的文档内容。但是要求你去除每一个Pdf文件的首页内容。虽然你可以下载一个处理pdf文件的软件来帮你操作,但是你自认编程能力强,要自己动手完成这一项事情~
2.编程思路
- 筛选出文件夹中所有的Pdf文件,将文件名保存至一个列表中。
- 循环打开每一个文件,创建pdf对象。
- 读取每一个文档除第一页的所有内容,追加到一个新的文档中。
- 将新的pdf文件保存至硬盘。
3.代码演示
import os,PyPDF2
#找出所有的pdf文件,并将文件名保存至列表。
filelist = []
for filename in os.listdir('./pdf'):
if filename.endswith('.pdf'):
filelist.append(filename)
#创建一个新的pdf
newPdfFile = PyPDF2.PdfFileWriter()
#循环打开每一个pdf文件,将内容添加至新的pdf
for filename in filelist:
pdfFile = open('./pdf/'+filename,'rb')
pdfObj = PyPDF2.PdfFileReader(pdfFile)
#获取页数
pageNum =pdfObj.numPages
for num in range(1,pageNum):
pageContent = pdfObj.getPage(num)
newPdfFile.addPage(pageContent)
# pdfFile.close()
newFile = open('combline.pdf','wb')
newPdfFile.write(newFile)
newFile.close()
4.未解疑点
在第22行,我写了一行代码:pdfFile.close(),意为将每个循环打开的文件进行关闭操作,但是运行之后,奇怪的事情发生了。新生成的pdf文档竟然是空的。出现这个现象,可以肯定我的语法没有任何问题,出问题的是我的编码逻辑,逻辑出错才是最致命也是最难以发现的。
我将pdfFile.close()注释之后竟然能够正常运行。这我就有点困惑了,难道我的关闭文件的操作是错误的?为和会出现错误呢?难道打的文件不关闭,留着占用内存吗?
当然,我也可以在文档的最后用循环去关闭每一个文件,但是我不明白在打开文件的那个循环之后去关闭文件何错之有?
如果你能看到这篇文章,如果你明白我是怎么错了,麻烦再留言区告知我,感谢~