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 GAE、Django导出Excel的方法
Nov 24 Python
python实现通过shelve修改对象实例
Sep 26 Python
python根据时间生成mongodb的ObjectId的方法
Mar 13 Python
利用numpy+matplotlib绘图的基本操作教程
May 03 Python
TensorFlow打印tensor值的实现方法
Jul 27 Python
selenium在执行phantomjs的API并获取执行结果的方法
Dec 17 Python
Python常用爬虫代码总结方便查询
Feb 25 Python
学习和使用python的13个理由
Jul 30 Python
python实现简单图书管理系统
Nov 22 Python
Flask之pipenv虚拟环境的实现
Nov 26 Python
Python实现使用dir获取类的方法列表
Dec 24 Python
Python内置方法和属性应用:反射和单例(推荐)
Jun 19 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 字符串编码截取函数(兼容utf-8和gb2312)
2009/05/02 PHP
php单文件版在线代码编辑器
2015/03/12 PHP
Zend Framework教程之配置文件application.ini解析
2016/03/10 PHP
PHP strcmp()和strcasecmp()的区别实例
2016/11/05 PHP
php微信公众号开发(2)百度BAE搭建和数据库使用
2016/12/15 PHP
PHP 网站修改默认访问文件的nginx配置
2017/05/27 PHP
php中访问修饰符的知识点总结
2019/01/27 PHP
js实现点击注册按钮开始读秒倒计时的小例子
2013/05/11 Javascript
如何使用jQuery Draggable和Droppable实现拖拽功能
2013/07/05 Javascript
两个多选select(multiple左右)添加、删除选项和取值实例
2014/05/12 Javascript
JavaScript数据推送Comet技术详解
2016/04/07 Javascript
微信小程序 toast 详解及实例代码
2016/11/09 Javascript
用js制作淘宝放大镜效果
2020/10/28 Javascript
vuejs如何配置less
2017/04/25 Javascript
浅谈JS如何实现真正的对象常量
2017/06/25 Javascript
javascript实现电脑和手机版样式切换
2017/11/10 Javascript
jQuery选择器之基本选择器用法实例分析
2019/02/19 jQuery
[41:08]2014 DOTA2国际邀请赛中国区预选赛 HGT VS NE
2014/05/22 DOTA
python对指定目录下文件进行批量重命名的方法
2015/04/18 Python
python通过openpyxl生成Excel文件的方法
2015/05/12 Python
Python cx_freeze打包工具处理问题思路及解决办法
2016/02/13 Python
Python操作使用MySQL数据库的实例代码
2017/05/25 Python
Python使用pymysql小技巧
2017/06/04 Python
使用Python实现在Windows下安装Django
2018/10/17 Python
日本PLST在线商店:日本时尚杂志刊载的人气服装
2016/12/10 全球购物
澳大利亚拥有最好的家具和家居用品在线目的地:Nestz
2019/02/23 全球购物
Lovedrobe官网:英国领先的大码服装品牌
2019/09/19 全球购物
Shopee菲律宾:在线购买和出售
2019/11/25 全球购物
专营店会计助理岗位职责
2013/11/29 职场文书
最美家庭活动方案
2014/08/31 职场文书
2014年向国旗敬礼活动方案
2014/09/27 职场文书
第二次离婚起诉书
2015/05/18 职场文书
网络营销实训总结
2015/08/03 职场文书
mysql优化之query_cache_limit参数说明
2021/07/01 MySQL
Apache Hudi集成Spark SQL操作hide表
2022/03/31 Servers
Python字符串常规操作小结
2022/04/03 Python