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中操作字符串之replace()方法的使用
May 19 Python
Python利用Beautiful Soup模块修改内容方法示例
Mar 27 Python
Python代码使用 Pyftpdlib实现FTP服务器功能
Jul 22 Python
python opencv将图片转为灰度图的方法示例
Jul 31 Python
python实现将两个文件夹合并至另一个文件夹(制作数据集)
Apr 03 Python
Python使用Excel将数据写入多个sheet
May 16 Python
python如何调用字典的key
May 25 Python
Python-openpyxl表格读取写入的案例详解
Nov 02 Python
去除python中的字符串空格的简单方法
Dec 22 Python
python中温度单位转换的实例方法
Dec 27 Python
解决Pytorch dataloader时报错每个tensor维度不一样的问题
May 28 Python
Python中生成随机数据安全性、多功能性、用途和速度方面进行比较
Apr 14 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
《星际争霸II》全新指挥官斯台特曼现已上线
2020/03/08 星际争霸
两级联动select刷新后其值保持不变的实现方法
2014/01/27 PHP
利用PHP将部分内容用星号替换
2020/04/21 PHP
PHP常见字符串操作函数与用法总结
2019/03/04 PHP
PHP7新特性
2021/03/09 PHP
根据鼠标的位置动态的控制层的位置
2009/11/24 Javascript
一个简单的js树形菜单
2011/12/09 Javascript
Java/JS获取flash高宽的具体方法
2013/12/27 Javascript
ECMAScript5中的对象存取器属性:getter和setter介绍
2014/12/08 Javascript
jQuery实现简洁的轮播图效果实例
2016/09/07 Javascript
express文件上传中间件Multer详解
2016/10/24 Javascript
从零开始学习Node.js系列教程四:多页面实现的数学运算示例
2017/04/13 Javascript
Angular4学习笔记之准备和环境搭建项目
2017/08/01 Javascript
React中上传图片到七牛的示例代码
2017/10/10 Javascript
微信小程序scroll-view组件实现滚动动画
2018/01/31 Javascript
Javascript实现秒表倒计时功能
2018/11/17 Javascript
Vue入门之数量加减运算操作示例
2018/12/11 Javascript
详解JavaScript对数组操作(添加/删除/截取/排序/倒序)
2019/04/28 Javascript
解决layui 三级联动下拉框更新时回显的问题
2019/09/03 Javascript
node.js中fs文件系统模块的使用方法实例详解
2020/02/13 Javascript
js+html+css实现手动轮播和自动轮播
2020/12/30 Javascript
[02:00]DOTA2英雄COSPLAY闹市街头巡游助威2015国际邀请赛
2015/08/02 DOTA
简单介绍Python中的JSON使用
2015/04/28 Python
python中WSGI是什么,Python应用WSGI详解
2017/11/24 Python
Python查找最长不包含重复字符的子字符串算法示例
2019/02/13 Python
python pickle存储、读取大数据量列表、字典数据的方法
2019/07/07 Python
Mac安装python3的方法步骤
2019/08/09 Python
深度学习入门之Pytorch 数据增强的实现
2020/02/26 Python
简单了解Python变量作用域正确使用方法
2020/06/12 Python
python 常用日期处理-- datetime 模块的使用
2020/09/02 Python
详解Html5页面实现下载文件(apk、txt等)的三种方式
2018/10/22 HTML / CSS
Lacoste美国官网:经典POLO衫品牌
2016/10/12 全球购物
世界上最大的艺术社区:SAA
2020/12/30 全球购物
企业法人授权委托书
2014/09/25 职场文书
初中班级口号霸气押韵
2015/12/24 职场文书
Nginx配置Https安全认证的实现
2021/05/26 Servers