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模拟登录百度代码分享(获取百度贴吧等级)
Dec 27 Python
python重试装饰器示例
Feb 11 Python
详解Python的Django框架中的templates设置
May 11 Python
Django中URLconf和include()的协同工作方法
Jul 20 Python
Python3爬虫之urllib携带cookie爬取网页的方法
Dec 28 Python
pandas ix &iloc &loc的区别
Jan 10 Python
详解python深浅拷贝区别
Jun 24 Python
django如何自己创建一个中间件
Jul 24 Python
python3 selenium自动化测试 强大的CSS定位方法
Aug 23 Python
python装饰器原理与用法深入详解
Dec 19 Python
tensorflow 自定义损失函数示例代码
Feb 05 Python
Python网络爬虫四大选择器用法原理总结
Jun 01 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 Token(令牌)设计
2008/03/15 PHP
PHP去掉从word直接粘贴过来的没有用格式的函数
2012/10/29 PHP
php通过字符串调用函数示例
2014/03/02 PHP
php导出excel格式数据问题
2014/03/11 PHP
微信公众平台开发关注及取消关注事件的方法
2014/12/23 PHP
PHP实现的构造sql语句类实例
2016/02/03 PHP
JS 分号引起的一段调试问题
2009/06/18 Javascript
jQuery 点击图片跳转上一张或下一张功能的实现代码
2010/03/12 Javascript
JavaScript传递变量: 值传递?引用传递?
2011/02/22 Javascript
简单学习JavaScript中的for语句循环结构
2015/11/10 Javascript
跟我学习javascript的call(),apply(),bind()与回调
2015/11/16 Javascript
用NODE.JS中的流编写工具是要注意的事项
2016/03/01 Javascript
prototype.js常用函数详解
2016/06/18 Javascript
一个极为简单的requirejs实现方法
2016/10/20 Javascript
javascript实现非常简单的小数取整功能示例
2017/06/13 Javascript
layer弹出层自适应高度,垂直水平居中的实现
2019/09/16 Javascript
Node使用Selenium进行前端自动化操作的代码实现
2019/10/10 Javascript
JS数组扁平化、去重、排序操作实例详解
2020/02/24 Javascript
在pycharm中开发vue的方法步骤
2020/03/04 Javascript
如何使用JavaScript实现无缝滚动自动播放轮播图效果
2020/08/20 Javascript
Python中文编码那些事
2014/06/25 Python
Python数据类型学习笔记
2016/01/13 Python
python 简单的多线程链接实现代码
2016/08/28 Python
Python操作Excel之xlsx文件
2017/03/24 Python
Python实现判断一个字符串是否包含子串的方法总结
2017/11/21 Python
python的pandas工具包,保存.csv文件时不要表头的实例
2018/06/14 Python
django使用django-apscheduler 实现定时任务的例子
2019/07/20 Python
详解django中Template语言
2020/02/22 Python
用Python自动清理电脑内重复文件,只要10行代码(自动脚本)
2021/01/09 Python
纯CSS实现预加载动画效果
2017/09/06 HTML / CSS
html5自定义video标签的海报与播放按钮功能
2019/12/04 HTML / CSS
小摄影师教学反思
2014/04/27 职场文书
在职证明书范本(2014新版)
2014/09/25 职场文书
幼儿园大班教师个人工作总结
2015/02/05 职场文书
幼儿园辞职信范文
2015/02/27 职场文书
详解python网络进程
2021/06/15 Python