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自动化测试ConfigParser模块读写配置文件
Aug 15 Python
Python 稀疏矩阵-sparse 存储和转换
May 27 Python
python字符串中匹配数字的正则表达式
Jul 03 Python
python 将字符串中的数字相加求和的实现
Jul 18 Python
Python学习笔记之列表和成员运算符及列表相关方法详解
Aug 22 Python
Python的互斥锁与信号量详解
Sep 12 Python
python绘制雪景图
Dec 16 Python
python求numpy中array按列非零元素的平均值案例
Jun 08 Python
Linux安装Python3如何和系统自带的Python2并存
Jul 23 Python
Python如何实现大型数组运算(使用NumPy)
Jul 24 Python
Python 捕获代码中所有异常的方法
Aug 03 Python
matplotlib绘制鼠标的十字光标的实现(自定义方式,官方实例)
Jan 10 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
session在php5.3中的变化 session_is_registered() is deprecated in
2013/11/12 PHP
php数组删除元素示例
2014/03/21 PHP
php CI框架插入一条或多条sql记录示例
2014/07/29 PHP
php中str_pad()函数用法分析
2017/03/28 PHP
jQuery.buildFragment使用方法及思路分析
2013/01/07 Javascript
jquery 删除字符串最后一个字符的方法解析
2014/02/11 Javascript
超级给力的JavaScript的React框架入门教程
2015/07/02 Javascript
javascript实现拖动元素交换位置
2015/11/29 Javascript
JavaScript动态插入CSS的方法
2015/12/10 Javascript
jQuery实现鼠标经过时高亮,同时其他同级元素变暗的效果
2016/09/18 Javascript
ionic由于使用了header和subheader导致被遮挡的问题的两种解决方法
2016/09/22 Javascript
Vue.js第三天学习笔记(计算属性computed)
2016/12/01 Javascript
jquery广告无缝轮播实例
2017/01/05 Javascript
iframe与主框架跨域相互访问实现方法
2017/09/14 Javascript
iview给radio按钮组件加点击事件的实例
2017/09/30 Javascript
javascript+HTML5 canvas绘制时钟功能示例
2019/05/15 Javascript
Vue 动态路由的实现及 Springsecurity 按钮级别的权限控制
2019/09/05 Javascript
Python中的ctime()方法使用教程
2015/05/22 Python
Python中is与==判断的区别
2017/03/28 Python
Python3.X 线程中信号量的使用方法示例
2017/07/24 Python
Python实现翻转数组功能示例
2018/01/12 Python
python爬虫中get和post方法介绍以及cookie作用
2018/02/08 Python
Python3.6.2调用ffmpeg的方法
2019/01/10 Python
Python中常用的8种字符串操作方法
2019/05/06 Python
python3 下载网络图片代码实例
2019/08/27 Python
Selenium 滚动页面至元素可见的方法
2020/03/18 Python
Python基于wordcloud及jieba实现中国地图词云图
2020/06/09 Python
Python和Bash结合在一起的方法
2020/11/13 Python
解决pip安装tensorflow中出现的no module named tensorflow.python 问题方法
2021/02/20 Python
JSP&Servlet技术面试题
2015/05/21 面试题
金融专业推荐信
2013/11/14 职场文书
医护人员英文求职信范文
2013/11/26 职场文书
活动策划邀请函
2014/02/06 职场文书
计算机网络及管理学专业求职信
2014/06/05 职场文书
湖南省党的群众路线教育实践活动总结会议新闻稿
2014/10/21 职场文书
详解python的异常捕获
2022/03/03 Python