import PyPDF2
import os
# 如果参数pathname指定的文件夹不存在,就新建一个
def create_dir(pathname):
if not os.path.exists(pathname):
os.mkdir(pathname)
# 取得path文件夹下的PDF文件
def get_filename(path):
# 新建一个列表变量,用来存储PDF文件的绝对路径
list_filename = []
# 遍历文件夹下的文件
for filename in os.listdir(path):
# 只获取PDF文件名
if filename.endswith('.pdf'):
# 将路径和文件名连接起来,
# 注意join()连结参数的字符是"\\",是两个反斜杠
filename_full = os.path.join(path, filename)
# 将文件绝对路径加入到列表变量中
list_filename.append(filename_full)
return list_filename
# 设置PDF文件的函数
# 参数list_file是要加密的PDF文件名,
# 参数outpath是加密后的PDF文件放在那个文件夹
# 参数passwd是加密的密码
def set_pass(list_file, outpath, passwd):
# 如果文件夹不存在就新建一个
create_dir(outpath)
for file in list_file:
# 读入PDF文件
file_obj = open(file, 'rb')
# 建立一个PDF文件读对象
pdf_reader_obj = PyPDF2.PdfFileReader(file_obj)
# 建立一个PDF文件写对象
pdf_writer_obj = PyPDF2.PdfFileWriter()
# 循环读入PDF文件的每一页
for page_index in range(pdf_reader_obj.numPages):
# 依据页号取得一页PD内容
page_obj = pdf_reader_obj.getPage(page_index)
# 在PDF文件写对象中将这一页加入
pdf_writer_obj.addPage(page_obj)
# 将文件加密
pdf_writer_obj.encrypt(passwd)
# 由于join()连结参数的字符是"\\",
# 所以下面的语句取出PDF的文件名(不包括路径)
filename = file.split('\\')[-1]
# 以写的方式打开文件,这个文件要放在outpath指定的文件夹中
file_out = open(os.path.join(outpath, filename), 'wb', )
# 将加密后的PDF写放相应文件夹中
pdf_writer_obj.write(file_out)
file_obj.close()
file_out.close()
# 主程序main
if __name__ == '__main__':
files = get_filename('.\pdf_dir')
set_pass(files, '.\pdf_pass', 'test')
这段代码是一个Python脚本,用于将指定文件夹下的PDF文件加密,
并将加密后的文件保存到另一个文件夹中。以下是对代码的解析:
-
导入PyPDF2和os模块:
import PyPDF2 import os
-
定义创建文件夹函数create_dir,如果指定的文件夹不存在,则创建一个新的文件夹:
def create_dir(pathname): if not os.path.exists(pathname): os.mkdir(pathname)
-
定义获取指定文件夹下PDF文件名的函数get_filename,返回一个包含PDF文件绝对路径的列表:
def get_filename(path): list_filename = [] for filename in os.listdir(path): if filename.endswith('.pdf'): filename_full = os.path.join(path, filename) list_filename.append(filename_full) return list_filename
-
定义设置PDF文件密码的函数set_pass,参数包括要加密的PDF文件列表,加密后的文件夹路径和密码:
def set_pass(list_file, outpath, passwd): create_dir(outpath) for file in list_file: file_obj = open(file, 'rb') pdf_reader_obj = PyPDF2.PdfFileReader(file_obj) pdf_writer_obj = PyPDF2.PdfFileWriter() for page_index in range(pdf_reader_obj.numPages): page_obj = pdf_reader_obj.getPage(page_index) pdf_writer_obj.addPage(page_obj) pdf_writer_obj.encrypt(passwd) filename = file.split('\\')[-1] file_out = open(os.path.join(outpath, filename), 'wb') pdf_writer_obj.write(file_out) file_obj.close() file_out.close()
-
主程序main,调用get_filename函数获取指定文件夹下的PDF文件列表,然后调用set_pass函数对文件进行加密:
if __name__ == '__main__': files = get_filename('.\pdf_dir') set_pass(files, '.\pdf_pass', 'test')
以上是这段代码的解析。关于Markdown表格,这里是纯文本环境无法直接显示成表格形式,只能以纯文本方式呈现给您。如果您有相关问题需要解答,请告诉我具体问题,我将尽力为您提供帮助。