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采用requests库模拟登录和抓取数据的简单示例
Jul 05 Python
Python读写文件方法总结
Jun 09 Python
Python实现的异步代理爬虫及代理池
Mar 17 Python
python基于ID3思想的决策树
Jan 03 Python
Android基于TCP和URL协议的网络编程示例【附demo源码下载】
Jan 23 Python
对Python 数组的切片操作详解
Jul 02 Python
python 将对象设置为可迭代的两种实现方法
Jan 21 Python
Python 字符串类型列表转换成真正列表类型过程解析
Aug 26 Python
如何运行带参数的python脚本
Nov 15 Python
OpenCV Python实现图像指定区域裁剪
Mar 12 Python
详解python中的异常捕获
Dec 15 Python
python 进制转换 int、bin、oct、hex的原理
Jan 13 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导入大量数据到mysql性能优化技巧
2014/12/29 PHP
Thinkphp单字母函数使用指南
2016/05/08 PHP
javascript offsetX与layerX区别
2010/03/12 Javascript
JavaScript中的console.assert()函数介绍
2014/12/29 Javascript
jQuery获取样式中颜色值的方法
2015/01/29 Javascript
javascript中this关键字详解
2016/12/12 Javascript
聊聊JavaScript如何实现继承及特点
2017/04/07 Javascript
JavaScript实现自动跳转文本功能
2017/05/25 Javascript
vue数据双向绑定的注意点
2017/06/23 Javascript
JavaScript 获取元素在父节点中的下标(推荐)
2017/06/28 Javascript
详解layui弹窗父子窗口之间传参数的方法
2018/01/16 Javascript
vue-cli 引入、配置axios的方法
2018/05/08 Javascript
解决vue.js this.$router.push无效的问题
2018/09/03 Javascript
关于vue的npm run dev和npm run build的区别介绍
2019/01/14 Javascript
如何解决js函数防抖、节流出现的问题
2019/06/17 Javascript
[40:53]完美世界DOTA2联赛PWL S3 Magma vs DLG 第二场 12.18
2020/12/20 DOTA
python实现问号表达式(?)的方法
2013/11/27 Python
跟老齐学Python之画圈还不简单吗?
2014/09/20 Python
Python编程实现两个文件夹里文件的对比功能示例【包含内容的对比】
2017/06/20 Python
使用tensorflow实现AlexNet
2017/11/20 Python
对Python通过pypyodbc访问Access数据库的方法详解
2018/10/27 Python
Python实现八皇后问题示例代码
2018/12/09 Python
Python读取分割压缩TXT文本文件实例
2020/02/14 Python
PyCharm Anaconda配置PyQt5开发环境及创建项目的教程详解
2020/03/24 Python
求职简历自荐信范文
2013/10/21 职场文书
初中女生自我鉴定
2013/12/19 职场文书
简单的辞职信范文
2014/01/18 职场文书
政府个人对照检查材料思想汇报
2014/10/08 职场文书
民政局办理协议离婚(范本)
2014/10/25 职场文书
小学感恩节活动总结
2015/03/24 职场文书
党支部评议意见
2015/06/02 职场文书
小学安全教育主题班会
2015/08/12 职场文书
2016年第16个全民国防教育日宣传活动总结
2016/04/05 职场文书
2019年房屋委托租赁合同范本(通用版)!
2019/07/17 职场文书
2019通用版导游词范本!
2019/08/07 职场文书
如何使用分区处理MySQL的亿级数据优化
2021/06/18 MySQL