一、源码
1、结果展示
??python自动化办公现在可不是一个陌生的词,也随着人们对自己隐私越来越看重,就会出现这样的需求:每人一个PDF文件,因有个人隐私信息,所以需要对文件进行加密且密码为本人身份证后六位。 ??废话不多说,上结论,程序运行结果如下: ??我们去一探究竟,原文件如下: ??获取密码如下: ??将文件加密以后结果如下: ??我们随机打开一个验证一下: ??输入身份证后六位,作为密码即可打开。
2、源码
??可运行源码如下:
import os
from PyPDF2 import PdfFileWriter, PdfFileReader
import pandas as pd
os.chdir("D:\加密")
def main():
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]
encryptionPDF(rosterLast,rosterNow,password)
def getPassword():
password = []
name = []
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])
for j in Name1:
name.append(j[0])
return name,password
def encryptionPDF(rosterLast,rosterNow,password):
pdf_reader = PdfFileReader(r'.\原文件\\%s'%(rosterLast))
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
from PyPDF2 import PdfFileWriter, PdfFileReader
import pandas as pd
??在这里我只是简单说明用这些第三方库干了什么,具体学习可参考官方文档或者菜鸟教程。
2、函数功能
??编码过程中也共定义有三个函数,其功能如下:
def main():
def getPassword():
def encryptionPDF(rosterLast,rosterNow,password):
3、代码拓展
??这只是一个很简单的需求,它并不具有普遍性,它可能仅在我电脑上可以运行,当你拷贝走源码以后可能就没法运行了,会报各种各样的错误。 ??如果你想直接用,那可能得按照我在编码过程中准备的数据一模一样的去准备。所以它其实只能用作学习交流,想要直接使用不太现实。 ??当然可以尝试着在此基础上增加功能或者增加代码的可用性与门槛。例如:获取用户输入的路径,定义密码模板等,让代码具有普遍性,可直接拷贝运行那种的。
三、可运行环境
??那如果你不想改源码,想直接用那怎么办? ??没问题!那你就跟着我来吧,一点一点来。 ??首先在D盘创建一个文件夹名为:加密;注意!必须保证它在根目录下!它的路径为D:\加密。然后打开文件创建如下:必须一模一样 ??差不多了,原文件放在原文件夹里面,运行以后的文件就在加密版本文件夹里面。 ??最重要的就是在名单的表格里面把信息填好,这就是用来设置密码的,表格格式如下:身份证号码格式为数字 ??表格只有两列!一列姓名、一列身份证号码。身份证号码为数字类型! ??欢迎关注,点赞。与我交流一同学习python、Django、爬虫、docker、路由交换、web安全等一切东西。
|