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 相关文章推荐
django连接mysql配置方法总结(推荐)
Aug 18 Python
如何使用python爬虫爬取要登陆的网站
Jul 12 Python
python通过robert、sobel、Laplace算子实现图像边缘提取详解
Aug 21 Python
python统计指定目录内文件的代码行数
Sep 19 Python
Python实现PyPDF2处理PDF文件的方法示例
Sep 25 Python
Python多线程爬取豆瓣影评API接口
Oct 22 Python
numpy实现神经网络反向传播算法的步骤
Dec 24 Python
python实现mask矩阵示例(根据列表所给元素)
Jul 30 Python
python绘图subplots函数使用模板的示例代码
Apr 30 Python
Python中with上下文管理协议的作用及用法
Mar 18 Python
Python面试不修改数组找出重复的数字
May 20 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
新52大事件
2020/03/03 欧美动漫
用PHP实现的四则运算表达式计算实现代码
2011/08/02 PHP
用PHP提取中英文词语以及数字的首字母的方法介绍
2013/04/23 PHP
Yii实现文章列表置顶功能示例
2016/10/18 PHP
php数据库操作model类(使用__call方法)
2016/11/16 PHP
利用php的ob缓存机制实现页面静态化方法
2017/07/09 PHP
php7连接MySQL实现简易查询程序的方法
2020/10/13 PHP
jquery中ajax学习笔记4
2011/10/16 Javascript
使用JS画图之点、线、面
2015/01/12 Javascript
jQuery实现仿Alipay支付宝首页全屏焦点图切换特效
2015/05/04 Javascript
全面解析Bootstrap排版使用方法(文字样式)
2015/11/30 Javascript
js中 计算两个日期间的工作日的简单实例
2016/08/08 Javascript
JS实现一次性弹窗的方法【刷新后不弹出】
2016/12/26 Javascript
jQuery使用DataTable实现删除数据后重新加载功能
2017/02/27 Javascript
原生JS实现不断变化的标签
2017/05/22 Javascript
JavaScript+HTML5实现的日期比较功能示例
2017/07/12 Javascript
在 Typescript 中使用可被复用的 Vue Mixin功能
2018/04/17 Javascript
web页面和微信小程序页面实现瀑布流效果
2018/09/26 Javascript
详解iview的checkbox多选框全选时校验问题
2019/06/10 Javascript
改变layer confirm弹窗按钮的颜色方法
2019/09/12 Javascript
python使用win32com在百度空间插入html元素示例
2014/02/20 Python
详解python中的json和字典dict
2018/06/22 Python
python ftplib模块使用代码实例
2019/12/31 Python
python+opencv实现车道线检测
2021/02/19 Python
css3背景图片透明叠加属性cross-fade简介及用法实例
2013/01/08 HTML / CSS
Html5自定义字体解决方法
2019/10/09 HTML / CSS
中国跨境电子商务网站:NewFrog
2018/03/10 全球购物
Mio Skincare英国官网:身体紧致及孕期身体护理
2018/08/19 全球购物
Andrew Marc官网:设计师外套的领先制造商
2019/10/30 全球购物
邮政竞聘演讲稿
2014/09/03 职场文书
2014年控辍保学工作总结
2014/12/08 职场文书
《家世》读后感:看家训的力量
2019/12/30 职场文书
go原生库的中bytes.Buffer用法
2021/04/25 Golang
Java 中的 Unsafe 魔法类的作用大全
2021/06/26 Java/Android
nginx配置虚拟主机的详细步骤
2021/07/21 Servers
Java字符串逆序方法详情
2022/03/21 Java/Android