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 相关文章推荐
在Debian下配置Python+Django+Nginx+uWSGI+MySQL的教程
Apr 25 Python
python web框架学习笔记
May 03 Python
从局部变量和全局变量开始全面解析Python中变量的作用域
Jun 16 Python
Django中反向生成models.py的实例讲解
May 30 Python
Python Cookie 读取和保存方法
Dec 28 Python
由Python编写的MySQL管理工具代码实例
Apr 09 Python
Python玩转加密的技巧【推荐】
May 13 Python
PyCharm中代码字体大小调整方法
Jul 29 Python
python lambda表达式在sort函数中的使用详解
Aug 28 Python
python的mysql数据库建立表与插入数据操作示例
Sep 30 Python
python中如何进行连乘计算
May 28 Python
Pytorch中Softmax与LogSigmoid的对比分析
Jun 05 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 checkdate、getdate等日期时间函数操作详解
2010/03/11 PHP
PHP中读取文件的8种方法和代码实例
2014/08/05 PHP
ThinkPHP分组下自定义标签库实例
2014/11/01 PHP
php爬取天猫和淘宝商品数据
2018/02/23 PHP
php无限级分类实现评论及回复功能
2019/02/18 PHP
常用js脚本
2006/12/03 Javascript
JS实现简易图片轮播效果的方法
2015/03/25 Javascript
开启BootStrap学习之旅
2016/05/04 Javascript
JS实现iframe编辑器光标位置插入内容的方法(兼容IE和Firefox)
2016/06/24 Javascript
AngularJS  ng-repeat遍历输出的用法
2017/06/19 Javascript
Angular实现的敏感文字自动过滤与提示功能示例
2017/12/29 Javascript
浅谈react性能优化的方法
2018/09/05 Javascript
微信小程序配置服务器提示验证token失败的解决方法
2019/04/03 Javascript
关于NodeJS中的循环引用详解
2019/07/23 NodeJs
Vue通过WebSocket建立长连接的实现代码
2019/11/05 Javascript
jQuery实现轮播图效果
2019/11/26 jQuery
vue实现在线预览pdf文件和下载(pdf.js)
2019/11/26 Javascript
Python httplib模块使用实例
2015/04/11 Python
Python 正则表达式入门(中级篇)
2016/12/07 Python
Python实现采用进度条实时显示处理进度的方法
2017/12/19 Python
python 重命名轴索引的方法
2018/11/10 Python
Python查找最长不包含重复字符的子字符串算法示例
2019/02/13 Python
pytorch之ImageFolder使用详解
2020/01/06 Python
Pyecharts 动态地图 geo()和map()的安装与用法详解
2020/03/25 Python
keras绘制acc和loss曲线图实例
2020/06/15 Python
CSS3中设置3D变形的transform-style属性详解
2016/05/23 HTML / CSS
团工委书记自荐书范文
2013/12/17 职场文书
优秀教师工作感言
2014/02/16 职场文书
工地安全标语
2014/06/07 职场文书
2015年度个人思想工作总结
2015/04/08 职场文书
导游词之丽江普济寺
2019/10/22 职场文书
如何使用 resize 实现图片切换预览功能
2021/08/23 HTML / CSS
关于python pygame游戏进行声音添加的技巧
2021/10/24 Python
vue生命周期钩子函数以及触发时机
2022/04/26 Vue.js
在Windows Server 2012上安装 .NET Framework 3.5 所遇到的问题
2022/04/29 Servers
利用Python实现模拟登录知乎
2022/05/25 Python