Python编程快速上手——PDF文件操作案例分析


Posted in Python onFebruary 28, 2020

本文实例讲述了Python PDF文件操作。分享给大家供大家参考,具体如下:

题目如下:

  • 利用第九章的os.walk()函数编写脚本,遍历文件夹中的所有pdf,用命令行提供的命令对这些PDF进行加密,用原来的文件名加上_encrypted.pdf后缀,保存每个加密的PDF。在删除原来的文件之前,尝试用程序读取并解密该文件,确保被正确加密
  • 然后编写一个程序,找到文件夹中所有加密的PDF文件,利用提供的口令,创建pdf的解密拷贝,如果口令不对,程序应该打印一条消息,
    并继续处理下一个pdf文件

思路如下:

- 程序内函数1需要做以下事情:
找出文件夹中所有PDF文件
对PDF文件进行加密
保存加密的PDF文件
检验是否正确加密
删除源文件
- 程序内函数2需要做以下事情:
遍历文件夹中所有带_encrypted后缀的PDF文件
利用提供的口令进行打开
能够正确打开,则进行口令拷贝保存到txt文件
不能正确打开输出到屏幕
- 代码需要做以下事情:
导入os,PyPDF2,sys,send2trash
生成新文件夹用于保存加密PDF及拷贝文本

  • 编写一个加密函数
    函数内调用os.walk()遍历文件夹,文件名保存到列表
    命令行参数sys.argv()提供加密口令
    for循环进行文件加密和保存加密文件操作
    decrypt进行解密,确保正确加密,并进行反馈
    删除原有文件(send2trash)
  • 编写一个生成解密拷贝函数
    os.walk()遍历,decrypt进行解密,反馈结果,生成密码拷贝txt
    try-except进行decrypt控制,解密失败打印消息,continue继续

代码如下:

由于我的代码在命令行运行时提示找不到PyPDF2模块,所以sys.argv命令行参数用的字符串直接放入函数进行代替。

#! python3
import os, sys, PyPDF2,send2trash

os.makedirs(".\\NewPDF")
print("文件夹创建成功!")
path1 = os.path.abspath(".\\NewPDF")
# 文件加密函数
def decryptFile(argv,p = os.path.abspath(".\\New")):
 tagFloder = '.\\PDF'
 pdfList = []
 #当前目录下创建新文件夹
 #os.makedirs(".\\NewPDF")
 #遍历目标文件夹,将.pdf文件名添加到列表
 for foldername, subfolders, filenames in os.walk(tagFloder):
  for filename in filenames:
   if filename.endswith('.pdf'):
    pdfList.append(filename)
    print('找到PDF文件:%s' %filename)
   else:
    continue
 #对pdf文件进行加密)
 for i in pdfList:
  pdfFile = open(os.path.join(foldername,filename),'rb')
  pdfReader = PyPDF2.PdfFileReader(pdfFile)
  pdfWriter = PyPDF2.PdfFileWriter()
  #拷贝
  for pageNum in range(pdfReader.numPages):
   pdfWriter.addPage(pdfReader.getPage(pageNum))
  newName = i[0:-4] #对文件名进行分割
  pdfWriter.encrypt(argv) #口令加密
  pdfResult = open("{0}\\{1}_encrypted.pdf".format(p,newName),"wb+") #创建新文件名对象
  pdfWriter.write(pdfResult) #写入新文件
  pdfReader2 = PyPDF2.PdfFileReader(pdfResult,'rb')
  #进行加密确认
  if pdfReader2.decrypt(argv):
   print("正确加密!删除原文件中...")
   try:
    send2trash.send2trash(os.path.join(foldername,i))
   except:
    print("删除原文件:%s 失败!"%i)
  pdfResult.close()
  print("Done!")

# 口令拷贝函数
def copyDcrypt(argv,p = os.path.abspath(".\\New")):
 pdfList = []
 for foldername, subfolders, filenames in os.walk("."):
  print("父文件夹:%s"%foldername)
  for filename in filenames:
   if filename.endswith(".pdf"):
    pdfReader = PyPDF2.PdfFileReader(open(os.path.join(foldername,filename),'rb'))
    if pdfReader.isEncrypted:
     pdfList.append(filename)
     print('找到已加密PDF文件:%s' % filename)
   else:
    continue
  for i in pdfList:
   newName = i[0:-4] #对文件名进行分割
   try:
    if pdfReader.decrypt(argv) == 1:
     copyFile = open("{0}\\{1}_PASSWORD.txt" .format(p,newName), 'w')
     copyFile.write("Password is : %s" % argv)
     copyFile.close()
     print("口令正确!拷贝生成成功!")
    else:
     print("口令错误!")
   except:
    continue
# 调用函数
decryptFile("ABCDEFG",path1) 

copyDcrypt("ABCDEFG",path1)

运行结果:

  • pycharm界面运行结果:
    Python编程快速上手——PDF文件操作案例分析
    Python编程快速上手——PDF文件操作案例分析
    - 原文件夹:
    Python编程快速上手——PDF文件操作案例分析
    - 新文件夹:
    Python编程快速上手——PDF文件操作案例分析
    - 拷贝文本文件:
    Python编程快速上手——PDF文件操作案例分析

更多Python相关内容感兴趣的读者可查看本站专题:《Python文件与目录操作技巧汇总》、《Python编码操作技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python去掉字符串中重复字符的方法
Feb 27 Python
Python学习笔记之os模块使用总结
Nov 03 Python
Python中使用第三方库xlrd来读取Excel示例
Apr 05 Python
Python同时向控制台和文件输出日志logging的方法
May 26 Python
Python MySQL数据库连接池组件pymysqlpool详解
Jul 07 Python
Python数据结构与算法之图结构(Graph)实例分析
Sep 05 Python
python 3.6 +pyMysql 操作mysql数据库(实例讲解)
Dec 20 Python
Python多进程fork()函数详解
Feb 22 Python
对python 中class与变量的使用方法详解
Jun 26 Python
如何爬取通过ajax加载数据的网站
Aug 15 Python
Python3 解决读取中文文件txt编码的问题
Dec 20 Python
详解Java中一维、二维数组在内存中的结构
Feb 11 Python
Python自动采集微信联系人的实现示例
Feb 28 #Python
python代码实现TSNE降维数据可视化教程
Feb 28 #Python
Python range与enumerate函数区别解析
Feb 28 #Python
使用python的turtle函数绘制一个滑稽表情
Feb 28 #Python
python使用pandas抽样训练数据中某个类别实例
Feb 28 #Python
如何使用repr调试python程序
Feb 28 #Python
Python编程快速上手——Excel到CSV的转换程序案例分析
Feb 28 #Python
You might like
PHP里的中文变量说明
2011/07/23 PHP
php操作XML、读取数据和写入数据的实现代码
2014/08/15 PHP
PHP生成网站桌面快捷方式代码分享
2014/10/11 PHP
php中define用法实例
2015/07/30 PHP
PHP Callable强制指定回调类型的方法
2016/08/30 PHP
CI框架AR数据库操作常用函数总结
2016/11/21 PHP
PHPstorm快捷键(分享)
2017/07/17 PHP
yii2 上传图片的示例代码
2018/11/02 PHP
PHP 裁剪图片
2021/03/09 PHP
JavaScript学习笔记(二) js对象
2011/10/25 Javascript
JavaScript字符串String和Array操作的有趣方法
2012/12/18 Javascript
jquery实现类似淘宝星星评分功能有截图
2014/09/15 Javascript
jquery实现Ctrl+Enter提交表单的方法
2015/07/21 Javascript
浅谈vuex 闲置状态重置方案
2018/01/04 Javascript
Vue利用canvas实现移动端手写板的方法
2018/05/03 Javascript
原生js实现获取form表单数据代码实例
2019/03/27 Javascript
微信内置开发 iOS修改键盘换行为搜索的解决方案
2019/11/06 Javascript
vue列表数据发生变化指令没有更新问题及解决方法
2020/01/16 Javascript
在Python中移动目录结构的方法
2016/01/31 Python
对python中Matplotlib的坐标轴的坐标区间的设定实例讲解
2018/05/25 Python
python 构造三维全零数组的方法
2018/11/12 Python
使用50行Python代码从零开始实现一个AI平衡小游戏
2018/11/21 Python
django获取from表单multiple-select的value和id的方法
2019/07/19 Python
wxPython窗体拆分布局基础组件
2019/11/19 Python
python GUI库图形界面开发之PyQt5输入对话框QInputDialog详细使用方法与实例
2020/02/27 Python
Python加速程序运行的方法
2020/07/29 Python
英国版MAC彩妆品牌:Illamasqua
2018/04/18 全球购物
《珍珠泉》教学反思
2014/02/20 职场文书
光信息科学与技术专业职业生涯规划
2014/03/13 职场文书
大三学习计划书范文
2014/05/02 职场文书
就业协议书盖章的注意事项
2014/09/28 职场文书
前台文员岗位职责
2015/02/04 职场文书
海底两万里读书笔记
2015/06/26 职场文书
2015初中生物教研组工作总结
2015/07/21 职场文书
2015年度个人工作总结报告
2015/10/24 职场文书
财务会计个人原因辞职信
2019/06/21 职场文书