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正则表达式匹配ip地址实例
Oct 09 Python
让 python 命令行也可以自动补全
Nov 30 Python
Django中几种重定向方法
Apr 28 Python
Python fileinput模块使用实例
Jun 03 Python
Python中threading模块join函数用法实例分析
Jun 04 Python
python3.5仿微软计算器程序
Mar 30 Python
详解Python多线程Selenium跨浏览器测试
Apr 01 Python
python爬取淘宝商品详情页数据
Feb 23 Python
Python使用min、max函数查找二维数据矩阵中最小、最大值的方法
May 15 Python
linux环境中没有网络怎么下载python
Jul 07 Python
详解Python对JSON中的特殊类型进行Encoder
Jul 15 Python
Django单元测试工具test client使用详解
Aug 02 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 删除文件与文件夹操作 unlink()与rmdir()这两个函数的使用
2011/07/17 PHP
Php图像处理类代码分享
2012/01/19 PHP
php中将字符串转为HTML的实体引用的一个类
2013/02/03 PHP
邮箱正则表达式实现代码(针对php)
2013/06/21 PHP
PHP循环遍历数组的3种方法list()、each()和while总结
2014/11/19 PHP
php中final关键字用法分析
2016/12/07 PHP
PHP设计模式之工厂模式定义与用法详解
2018/04/03 PHP
非常强大的 jQuery.AsyncBox 弹出对话框插件
2011/08/29 Javascript
javascript中局部变量和全局变量的区别详解
2015/02/27 Javascript
JavaScript中常见的字符串操作函数及用法汇总
2015/05/04 Javascript
Javascript中作用域的详细介绍
2016/10/06 Javascript
easyui中combotree循环获取父节点至根节点并输出路径实现方法
2016/11/10 Javascript
jQuery Ajax File Upload实例源码
2016/12/12 Javascript
JS前向后瞻正则表达式定义与用法示例
2016/12/27 Javascript
简单实现jQuery多选框功能
2017/01/09 Javascript
jQuery+PHP+Mysql实现抽奖程序
2020/04/12 jQuery
详谈DOM简介及节点、属性、查找节点的方法
2017/11/16 Javascript
Vue.js点击切换按钮改变内容的实例讲解
2018/08/22 Javascript
图文讲解vue的v-if使用方法
2019/02/11 Javascript
基于Vue实现微前端的示例代码
2020/04/24 Javascript
[48:35]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 TNC vs Optic
2018/04/03 DOTA
Python基于动态规划算法计算单词距离
2015/07/25 Python
简单理解Python中的装饰器
2015/07/31 Python
python 借助numpy保存数据为csv格式的实现方法
2018/07/04 Python
Python 装饰器原理、定义与用法详解
2019/12/07 Python
CSS3动画效果回调处理详解
2014/12/10 HTML / CSS
详解移动端HTML5页面端去掉input输入框的白色背景和边框(兼容Android和ios)
2016/12/15 HTML / CSS
AmazeUI 等分网格的实现示例
2020/08/25 HTML / CSS
Booking.com荷兰:全球酒店网上预订
2017/08/22 全球购物
Otticanet意大利:最顶尖的世界名牌眼镜, 能得到打折季的价格
2019/03/10 全球购物
销售冠军获奖感言
2014/02/03 职场文书
政府法律服务方案
2014/06/14 职场文书
乡镇领导班子四风整顿行动工作汇报
2014/10/25 职场文书
交警正风肃纪剖析材料
2014/10/29 职场文书
2015年招商引资工作总结
2015/04/25 职场文书
五年级作文之学校的四季
2019/12/05 职场文书