python如何实现批量文件加密功能?本篇文章小编给大家分享一下python实现批量文件加密功能代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。
一、源码
1、结果展示
python自动化办公现在可不是一个陌生的词,也随着人们对自己隐私越来越看重,就会出现这样的需求:每人一个PDF文件,因有个人隐私信息,所以需要对文件进行加密且密码为本人身份证后六位。
废话不多说,上结论,程序运行结果如下:
我们去一探究竟,原文件如下:
获取密码如下:
将文件加密以后结果如下:
我们随机打开一个验证一下:
输入身份证后六位,作为密码即可打开。
2、源码
可运行源码如下:
import os from PyPDF2 import PdfFileWriter, PdfFileReader import pandas as pd # 全局工作目录 os.chdir("D:加密") def main(): # 1、找文件 # 获取实习证明原文件的文件名 rosterfile = os.listdir('.原文件') # 获取信息中表的姓名与密码 name,Password = getPassword() # 对每个文件进行加密并保存 for prove in rosterfile: for Name in name: if Name in prove: i = name.index(Name) rosterLast = prove rosterNow = '.文件加密版本' + prove password = Password[i] # 2、加密文件并输出 encryptionPDF(rosterLast,rosterNow,password) # 获取了表中姓名信息,并提取身份证后六位作为密码 def getPassword(): password = [] name = [] # 获取Excel列,包括姓名、身份证号 Name = pd.read_excel('.名单.xlsx', usecols=[0],names=None) # 读取项目名称列,不要列名 Id = pd.read_excel('.名单.xlsx', usecols=[1],names=None) # 读取项目名称列,不要列名 Name1 = Name.values.tolist() id = Id.values.tolist() # 提取身份证后六位作为密码 for i in id: password.append(str(i[0])[12:18:1]) # 提取姓名为字符串,原来为list for j in Name1: name.append(j[0]) return name,password # 加密文件并输出 # 变量说明:rosterLast-原PDF文件路径,rosterNow-加密后输出路径,password-加密密码 def encryptionPDF(rosterLast,rosterNow,password): pdf_reader = PdfFileReader(r'.原文件%s'%(rosterLast)) # 输入你想要操作的pdf文档的位置/名称 pdf_writer = PdfFileWriter() for page in range(pdf_reader.getNumPages()): pdf_writer.addPage(pdf_reader.getPage(page)) pdf_writer.encrypt(password) # 写入密码并输出到目的路径 with open(rosterNow, 'wb') as out: pdf_writer.write(out) print("文件:%s----已完成加密,密码为:%s"%(rosterLast,password)) # 函数入口 if __name__ == '__main__': print("-----开始加密-----") main() print("-----加密完成-----")
二、源码注释
1、所使用依赖包
共使用三个函数:
# 文件操作 import os # 操作PDF文件 from PyPDF2 import PdfFileWriter, PdfFileReader # 操作数据 import pandas as pd
在这里我只是简单说明用这些第三方库干了什么,具体学习可参考官方文档或者教程。
2、函数功能
编码过程中也共定义有三个函数,其功能如下:
# 主函数,从这里我们可以看到我整体是如何实现此需求的 def main(): # 功能函数,用来获取文件密码的,然后使用姓名与文件名做匹配,达到本人文件为本人身份证后六位的需求。 def getPassword(): # 功能函数,本次编码的核心,前面都可以作为准备阶段,就是为本函数用来加密文件而提供读取、输出路径以及密码的。 def encryptionPDF(rosterLast,rosterNow,password):
3、代码拓展
这只是一个很简单的需求,它并不具有普遍性,它可能仅在我电脑上可以运行,当你拷贝走源码以后可能就没法运行了,会报各种各样的错误。
如果你想直接用,那可能得按照我在编码过程中准备的数据一模一样的去准备。所以它其实只能用作学习交流,想要直接使用不太现实。
当然可以尝试着在此基础上增加功能或者增加代码的可用性与门槛。例如:获取用户输入的路径,定义密码模板等,让代码具有普遍性,可直接拷贝运行那种的。
三、可运行环境
那如果你不想改源码,想直接用那怎么办?
没问题!那你就跟着我来吧,一点一点来。
首先在D盘创建一个文件夹名为:加密;注意!必须保证它在根目录下!它的路径为D:加密。然后打开文件创建如下:必须一模一样
差不多了,原文件放在原文件夹里面,运行以后的文件就在加密版本文件夹里面。
最重要的就是在名单的表格里面把信息填好,这就是用来设置密码的,表格格式如下:身份证号码格式为数字
表格只有两列!一列姓名、一列身份证号码。身份证号码为数字类型!