文件夹结构:
Folder
/ \
/ \
subfolder1 files
/\
/ \
inner_subfolder1 files
/\
/ \
sub_inner_folder files
/
files
这里的问题是sub_inner_folder
中的文件未加密
def encypt_Files():
for folder, subfolders, files in os.walk('/home/username/Desktop/folder'):
for subfolder in subfolders:
os.chdir(folder)
for files in os.listdir():
if files.endswith('.pdf'):
PdfReaderobj = PyPDF2.PdfFileReader(open(files, 'rb'))
PdfWriterobj = PyPDF2.PdfFileWriter()
if PdfReaderobj.isEncrypted:
break
else:
PdfWriterobj.addPage(PdfReaderobj.getPage(0))
PdfWriterobj.encrypt(sys.argv[1])
resultPdf = open(files.strip('.pdf')+'_encrypted.pdf', 'wb')
PdfWriterobj.write(resultPdf)
resultPdf.close()
foldername=[]#用于存储文件夹路径
对于os.walk(路径)中的文件夹、子文件夹和文件: foldername.append(文件夹)#在列表中存储文件夹路径
对于foldername中的文件路径:
我看到的一个问题是,在查找加密文件时
break
超出了内部for
循环。这可能是一个continue
,但是您使用files
创建一个新的迭代器表明您可能需要重新考虑整个策略另一个问题是,您正在
chdir
指向一个相对路径,该路径可能不再是相对于您所在的位置的。我建议改用os.path.join哦,你正在{}转向{},而不是预期的{}
我建议你重新开始。使用
os.walk
提供的files
迭代器,并使用os.path.join
列出目录结构中每个文件的完整路径。然后使用每个文件的完整路径添加pdf加密代码,并删除chdir
您需要
os.chdir(folder)
其中应该是os.chdir(subfolder)
。此外,在使用完该目录后,还需要使用os.chdir("..")
将该目录更改回原来的目录如果您从错误的工作目录开始,您将无法
chdir()
任何地方。所以你首先需要一个os.chdir("/home/username/Desktop/folder")
此外,权限可能会中断循环。加
但是:
os.walk()
已经为您提供了一个文件列表。你只需要把这些循环一下。这样你也可以摆脱os.listdir()
还有一个对我来说完全合理的选择:
相关问题 更多 >
编程相关推荐