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 字符串定义
Sep 25 Python
Python选择排序、冒泡排序、合并排序代码实例
Apr 10 Python
举例讲解Python设计模式编程中的访问者与观察者模式
Jan 26 Python
Python正则表达式如何进行字符串替换实例
Dec 28 Python
浅谈python中的正则表达式(re模块)
Oct 17 Python
pandas中的DataFrame按指定顺序输出所有列的方法
Apr 10 Python
对python xlrd读取datetime类型数据的方法详解
Dec 26 Python
详解python中TCP协议中的粘包问题
Mar 22 Python
Python获取当前脚本文件夹(Script)的绝对路径方法代码
Aug 27 Python
Python中xml和dict格式转换的示例代码
Nov 07 Python
python实现Oracle查询分组的方法示例
Apr 30 Python
PIL.Image.open和cv2.imread的比较与相互转换的方法
Jun 03 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
《魔兽世界》惊魂幻象将获得调整
2020/03/08 其他游戏
php实现zip压缩文件解压缩代码分享(简单易懂)
2014/05/10 PHP
PHP中的多行字符串传递给JavaScript的两种方法
2014/06/19 PHP
js 全兼容可高亮二级缓冲折叠菜单
2010/06/04 Javascript
分享8款优秀的 jQuery 加载动画和进度条插件
2012/10/24 Javascript
js如何取消事件冒泡
2013/09/23 Javascript
node.js中的console.info方法使用说明
2014/12/09 Javascript
jQuery中大家不太了解的几个方法
2015/03/04 Javascript
js HTML5多媒体影音播放
2016/10/17 Javascript
学习vue.js中class与style绑定
2016/12/03 Javascript
BootStrap 图标icon符号图标glyphicons不正常显示的快速解决办法
2016/12/08 Javascript
HTML中使背景图片自适应浏览器大小实例详解
2017/04/06 Javascript
angular中使用Socket.io实例代码
2017/06/03 Javascript
详解Nodejs之静态资源处理
2017/06/05 NodeJs
Vue项目中跨域问题解决方案
2018/06/05 Javascript
[59:59]EG vs IG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[00:18]天涯墨客三技能展示
2018/08/25 DOTA
python 数据加密代码
2008/12/24 Python
Python中模拟enum枚举类型的5种方法分享
2014/11/22 Python
Python之父谈Python的未来形式
2016/07/01 Python
pandas读取csv文件,分隔符参数sep的实例
2018/12/12 Python
python引用(import)某个模块提示没找到对应模块的解决方法
2019/01/19 Python
Python Flask框架模板操作实例分析
2019/05/03 Python
200行python代码实现2048游戏
2019/07/17 Python
Django后台管理系统的图文使用教学
2020/01/20 Python
django教程如何自学
2020/07/31 Python
HTML5 Blob 实现文件下载功能的示例代码
2019/11/29 HTML / CSS
如何通过jdbc调用存储过程
2012/04/19 面试题
外贸业务员的岗位职责
2013/11/23 职场文书
企业安全生产责任书
2014/04/14 职场文书
离婚协议书格式
2014/11/21 职场文书
颐和园英文导游词
2015/01/30 职场文书
企业党建工作总结2015
2015/05/26 职场文书
Python中rapidjson参数校验实现
2021/07/25 Python
python自动化测试通过日志3分钟定位bug
2021/11/20 Python
python中 .npy文件的读写操作实例
2022/04/14 Python