質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.30%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

576閲覧

PythonでDeprecationError

lovelywolf

総合スコア8

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2024/11/27 02:41

実現したいこと

複数のPDFファイルを結合したいのですが、弊社はJustPDF4しか使えず。
いろいろ試した結果、Pythonにたどりつきました。
https://qiita.com/NY0R0N/items/727b1ea4eddeb07c5b80

発生している問題・分からないこと

ExcelVBAしか経験がなく、なんのエラーなのか、どうすれば良いのかわかりません。

エラーメッセージ

error

1C:\Users\***\Desktop\test>python mergedPDF2.py 2Traceback (most recent call last): 3 File "C:\Users\***\Desktop\test\mergedPDF2.py", line 6, in <module> 4 merger = PyPDF2.PdfFileMerger() 5 File "C:\Users\***\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\PyPDF2\_merger.py", line 817, in __init__ 6 deprecation_with_replacement("PdfFileMerger", "PdfMerger", "3.0.0") 7 File "C:\Users\***\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\PyPDF2\_utils.py", line 369, in deprecation_with_replacement 8 deprecation(DEPR_MSG_HAPPENED.format(old_name, removed_in, new_name)) 9 File "C:\Users\***\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\PyPDF2\_utils.py", line 351, in deprecation 10 raise DeprecationError(msg) 11PyPDF2.errors.DeprecationError: PdfFileMerger is deprecated and was removed in PyPDF2 3.0.0. Use PdfMerger instead.

該当のソースコード

import sys sys.path.append("C:/Users/***/AppData/Local/Microsoft/WindowsApps/python3.10/site-packages") import PyPDF2 merger = PyPDF2.PdfFileMerger() merger.append('2024年8月分.pdf') merger.append('2024年9月分.pdf') merger.write('merged.pdf') merger.close() print("done")

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

ググると、DeprecationWarningについては沢山出てきますが、DeprecationErrorとは違うよね?とハテナがいっぱいです。

元のコード
sys.path.append("/usr/local/lib/python3.9/site-packages")

sys.path.append("C:/Users/***/AppData/Local/Microsoft/WindowsApps/python3.10/site-packages")
に変更しています。

sys.path.append("C:/Users/***/AppData/Local/Microsoft/WindowsApps/python3.10")
でも同様のエラーでした。

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

quickquip

2024/11/27 02:50

> PdfFileMerger is deprecated and was removed in PyPDF2 3.0.0. と書いてあるのを読んでいますか?
poto568

2024/11/27 02:54

JustPDF2しか手元にありませんが、印刷時に既存のpdfファイルを指定すると 「既存のファイルと連結する」という選択肢が出ます。 少数であれば手動でも良いのでは? (大量のファイルを対象にしたいのでプログラムで流したいという要件があれば、 その旨質問文に追記してください。)
lovelywolf

2024/11/27 02:55

ありがとうございます。DeepLで翻訳してみました。 PdfFileMergerは非推奨で、PyPDF2 3.0.0で削除されました。代わりにPdfMergerを使用してください。 と出てきたので、 merger = PyPDF2.PdfMerger() に変更して実行してみた結果、doneの表示は出ました。 が、結合されたファイルは出来上がってこないのですが、なにがダメなんでしょうか。。。
lovelywolf

2024/11/27 03:06 編集

ありがとうございます。 >少数であれば手動でも良いのでは? 一連の流れとしては、 1.Outlookで受信したメールに添付されているファイルを所定のフォルダに保存 2.保存されたPDFファイルのみを結合 3.担当者へお知らせ という感じです。結合するファイルは2~15ファイルくらいで変動するそうです。 1と3はExcelVBAで実現できているのですが、2で躓きました。 添付されたPDFのファイル数やファイル名等はVBAで取得、セルに書き出してますので、 ループでpythonを呼び出して実行するつもりです。 ちなみに、ご依頼主曰く2が一番実現させたいとのことです。
melian

2024/11/27 03:16

手元の環境は Python 3.12.3/PyPDF2 3.0.1 ですが、merged.pdf が作成されます。内容も問題ありません。
guest

回答2

0

皆さま、ありがとうございました。
PyPDF2は古い、という情報をいただいてググりなおした結果、下記で解決できました。
https://www.cfxlog.com/python-pypdf/
あきらめなくて良かったです。本当にありがとうございました。

投稿2024/11/27 03:51

lovelywolf

総合スコア8

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

PyPDF2.errors.DeprecationError: PdfFileMerger is deprecated and was removed in PyPDF2 3.0.0. Use PdfMerger instead.

エラーに書いてあるとおり、PdfFileMerger は3.0.0で廃止され、PdfMergerになったのでそれを使いましょうということです。
Warningの場合は将来削除されることの警告ですが、親切に削除されたあともエラーとして表示してくれているってことですね。

また、PyPdf2はもう開発は修了していて、もとのpypdfに合流したようなので、使うのであればそちらを使いましょう。
https://pypi.org/project/PyPDF2/

使いかたについては、公式を参照したり、新しい記事を探したりするのがよさそうです。
古いバージョンとの差分については、公式に掲載しています。 質問のPdfFileMergerについても記述があります。
https://pypdf.readthedocs.io/en/stable/user/migration-1-to-2.html#

PyPdf2の古いバージョンを使うと今のコードjがそのまま動くかもしれません。ただし、新しい pythonでそれが動くかどうかはわかりません。

投稿2024/11/27 02:56

編集2024/11/27 02:58
TakaiY

総合スコア14413

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

lovelywolf

2024/11/27 03:15

ありがとうございます。 ご紹介いただいたHPを熟読し、意味を理解するのに時間がかかりそうです。 頑張ってみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問