圆月山庄资源网 Design By www.vgjia.com
本文实例讲述了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)
运行结果:
更多Python相关内容感兴趣的读者可查看本站专题:《Python文件与目录操作技巧汇总》、《Python编码操作技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》
希望本文所述对大家Python程序设计有所帮助。
标签:
Python,PDF文件操作
圆月山庄资源网 Design By www.vgjia.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
圆月山庄资源网 Design By www.vgjia.com
暂无评论...
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
2024年11月02日
2024年11月02日
- lol全球总决赛lck一号种子是谁 S14全球总决赛lck一号种子队伍
- BradMehldau-ApresFaure(2024)[24-96]FLAC
- IlCannone-FrancescaDegoPlaysPaganinisViolin(2021)[24-96]FLAC
- Tchaikovsky,Babajanian-PianoTrios-Gluzman,Moser,Sudbin[FLAC+CUE]
- 费玉清.1987-费玉清十周年旧曲情怀4CD【东尼】【WAV+CUE】
- 群星.2024-春花焰电视剧影视原声带【TME】【FLAC分轨】
- 方力申.2008-我的最爱新曲+精丫金牌大风】【WAV+CUE】
- 群星 《2024好听新歌35》十倍音质 U盘音乐 [WAV分轨][1.1G]
- 群星《烧透你的耳朵1》DXD金佰利 [低速原抓WAV+CUE][1.2G]
- 莫文蔚《超级金曲精选2CD》SONY [WAV+CUE][1.6G]
- 【RR】加尼克奥尔森GarrickOhlsso《贝多芬钢琴协奏曲全集》原声母带WAV
- 彭芳《纯色角1》[WAV+CUE]
- 李蔓《山顶的月亮—李蔓动态情歌》
- 梁咏琪.1999-新鲜【EEI】【WAV+CUE】
- 张琍敏.1979-悲之秋【海山】【FLAC分轨】