目录



>>> from helper import info; info()
页面更新时间: 2020-07-05 07:30:08
操作系统/OS: Linux-4.19.0-9-amd64-x86_64-with-debian-10.4 ;Python: 3.7.3

5.6. 实践项目

作为实践,编程完成下列任务。

PDF 偏执狂

利用第9章的 os.walk() 函数编写一个脚本, 遍历文件夹中的所有PDF(包含子文件夹),用命令行 提供的口令对这些PDF加密。用原来的文件名加_encrypted.pdf 后缀,保存每个加密的PDF。在删除原来的文件之前, 尝试用一个程序读取并解密该文件,确保它被正确 的加密。

然后编写一个程序,找到文件夹中所有加密的PDF文件 (包括它的子文件夹),利用提供的口令,创建PDF的解密 拷贝。如果口令不对,程序应该打印一条消息, 并继续处理下一个PDF文件。

定制邀请函,保存为Word文档

假设你有一个客人名单的文本文件。这个guests.txt文件 每行有一个名字,像下面这样:

Prof. Plum
Miss Scarlet
Col. Mustard
A1 Sweigart
RoboCop

写一个程序,生成定制邀请函的Word文档,如图13-11所示。

image0

图13-11 定制的邀请函脚本生成的Word文档

因为 python-docx 只能使用 Word 文档中已经存在的 样式,所以你必须先将这些样式添加到一个空白Word文件中, 然后用 python-docx 打开该文件。在生成的Word文档中, 每份邀请函应该占据一页,所以在每份邀请函的最后一段调用 add_break() ,添加分页符。这样,你只需要打开一份 Word文档,就能打印所有的邀请函。

你可以从 http://nostarch.com/automatestuff/ 下载示例guests.txt 文件。

暴力PDF口令破解程序

假定有一个加密的PDF文件,你忘记了口令,但记得它是一个 英语单词。尝试猜测遗忘的口令是很无聊的任务。作为替代, 你可以写一个程序,尝试用所有可能的英语单词来解密这个 PDF文件,直到找到有效的口令。这称为暴力口令攻击。从 http://nostarch.com/automatestuff/ 下载文本文件dictionary.txt。这个字典文件包含44000 多个英语单词,每个单词占一行。

利用第8章学过的文件读取技巧来读取这个文件,创建一个 单词字符串的列表。然后循环遍历这个列表中的每个单词, 将它传递给 decrypt 方法,如果这个方法返回整数0, 口令就是错的,程序应该继续尝试下一个口令。如果 decrypt。返回1,程序就应该终止循环,打印出破解的 口令。你应该尝试每个单词的大小写形式(在我的笔记本上, 遍历来自字典文件的所有88000个大小写单词,只要几分钟 时间。这就是不应该使用简单英语单词作为口令的原因)。