実現したいこと
複数PDFファイルの復号化を自動化したい。for文を使い、以下のようなコードを作成し、実現しようとしています。
python3
1import PyPDF2 2 3encrypted_files =[] #暗号化されたファイルのリスト 4decrypted_files =[] #復号化されたファイルのリスト 5for i in encrypted_files: 6 with open(i, mode='rb') as f: 7 reader = PyPDF2.PdfFileReader(f) 8 command=f"/usr/local/bin/qpdf --decrypt {i} {i+'-DECRYPTED.pdf'};" #復号化の為にqpdfを使用 9 os.system(command) 10 with open(i, mode='rb') as fp: 11 reader = PyPDF2.PdfFileReader(fp) 12 decrypted_files.append(i+'-DECRYPTED.pdf') 13 encrypted_files.remove(i)
発生している問題
エラーメッセージは出ないのですが、encrypted_filesに残ってしまうファイルがいくつか出てきます。しかし、2度、3度同じコードを手動で回すと全て復号化できます。手動で繰り返し回すことなく可能なものは全て復号化するためにはどうすれば良いでしょうか?
PDFファイルの復号化に限らず、for文などの繰り返し処理で似たような経験や解決策をお知りの方がいらっしゃいましたらよろしくお願いいたします。
試したこと
sleepを入れて以下のようにコードを変えてみましたが、解決しませんでした。
python3
1import PyPDF2 2 3for i in encrypted_files: 4 with open(i, mode='rb') as f: 5 reader = PyPDF2.PdfFileReader(f) 6 try: 7 reader.decrypt('') 8 sleep(3) 9 decrypted_files.append(i) 10 encrypted_files.remove(i) 11 except NotImplementedError: 12 command=f"/usr/local/bin/qpdf --decrypt {i} {i+'-DECRYPTED.pdf'};" 13 os.system(command) 14 with open(i, mode='rb') as fp: 15 reader = PyPDF2.PdfFileReader(fp) 16 decrypted_files.append(i+'-DECRYPTED.pdf') 17 encrypted_files.remove(i) 18 sleep(3)
補足情報
本問題の本質と関連なさそうと思っていますが、qpdfについてはこちらが補足情報になるかと思います。
環境
- Python 3.7.3
- macOS 10.14.6
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/03 14:39