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

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

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

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

3668閲覧

python エラーの原因がわかりません。初心者です。

dokidoki_hamuo

総合スコア38

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

2クリップ

投稿2019/06/05 02:48

編集2019/06/05 08:03

前提・実現したいこと

python初心者で勉強中です。
購入した本の例文をそのまま打ち込んだのですがエラーになりうまく動きません。
エラーの原因を教えていただきたいです。

内容はカレントディレクトリにあるPDFを合体させるもののようです。

PDFの名前以外は本に書いてあるそのまま打ち込みました。
初心者で知識がないので説明不十分かもしれませんが、よろしくお願いいたします。
Python 3.7.3
Windows7
----追記
結合用に用意しているPDFをtestpdfとだけ入力されているものにしたら、エラーが別のものに変わりました。(当初は写真が添付されてたり表などがあった)
でも結局うまく作動しないので原因を教えていただけると助かります。

発生している問題・エラーメッセージ

------PDFを変えた後のエラー UnicodeEncodeError: 'ascii' codec can't encode characters in position 24-25: ordinal not in range(128) ------PDFを変える前のエラー PdfReadError("Illegal character in Name Object") write C:\Users\userid\AppData\Local\Programs\Python\Python37\Lib\site-packages\PyPDF2\pdf.py 482 _sweepIndirectReferences C:\Users\userid\AppData\Local\Programs\Python\Python37\Lib\site-packages\PyPDF2\pdf.py 571 _sweepIndirectReferences C:\Users\userid\AppData\Local\Programs\Python\Python37\Lib\site-packages\PyPDF2\pdf.py 547 _sweepIndirectReferences C:\Users\userid\AppData\Local\Programs\Python\Python37\Lib\site-packages\PyPDF2\pdf.py 571 _sweepIndirectReferences C:\Users\userid\AppData\Local\Programs\Python\Python37\Lib\site-packages\PyPDF2\pdf.py 547 _sweepIndirectReferences C:\Users\userid\AppData\Local\Programs\Python\Python37\Lib\site-packages\PyPDF2\pdf.py 556 _sweepIndirectReferences C:\Users\userid\AppData\Local\Programs\Python\Python37\Lib\site-packages\PyPDF2\pdf.py 571 _sweepIndirectReferences C:\Users\userid\AppData\Local\Programs\Python\Python37\Lib\site-packages\PyPDF2\pdf.py 547 _sweepIndirectReferences C:\Users\userid\AppData\Local\Programs\Python\Python37\Lib\site-packages\PyPDF2\pdf.py 547 _sweepIndirectReferences C:\Users\userid\AppData\Local\Programs\Python\Python37\Lib\site-packages\PyPDF2\pdf.py 547 _sweepIndirectReferences C:\Users\userid\AppData\Local\Programs\Python\Python37\Lib\site-packages\PyPDF2\pdf.py 577 getObject C:\Users\userid\AppData\Local\Programs\Python\Python37\Lib\site-packages\PyPDF2\pdf.py 1611 readObject C:\Users\userid\AppData\Local\Programs\Python\Python37\Lib\site-packages\PyPDF2\generic.py 66 readFromStream C:\Users\userid\AppData\Local\Programs\Python\Python37\Lib\site-packages\PyPDF2\generic.py 579 readObject C:\Users\userid\AppData\Local\Programs\Python\Python37\Lib\site-packages\PyPDF2\generic.py 60 readFromStream C:\Users\userid\AppData\Local\Programs\Python\Python37\Lib\site-packages\PyPDF2\generic.py 492 PdfReadError: Illegal character in Name Object

該当のソースコード

import PyPDF2 pdf1_file = open('test1.pdf','rb') pdf2_file = open('test2.pdf','rb') pdf1_reader = PyPDF2.PdfFileReader(pdf1_file) pdf2_reader = PyPDF2.PdfFileReader(pdf2_file) pdf_writer = PyPDF2.PdfFileWriter() for page_num in range(pdf1_reader.numPages): page_obj = pdf2_reader.getPage(page_num) pdf_writer.addPage(page_obj) for page_num in range(pdf2_reader.numPages): page_obj =pdf2_reader.getPage(page_num) pdf_writer.addPage(page_obj) pdf_output_file =open('newdata.pdf','wb') pdf_writer.write(pdf_output_file) pdf_output_file.close() pdf2_file.close() pdf1_file.close()

試したこと

エラーメッセージを検索しましたがよくわかりませんでした。

補足情報(FW/ツールのバージョンなど)

Python 3.7.3
Windows7

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

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

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

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

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

quickquip

2019/06/05 02:59 編集

エラーメッセージはスタックトレースも含めて全部書きましょう。どこで出たエラーなのかすら回答者側にわからなくなっています。 "自分で解釈・要約しようとしてはいけません" https://teratail.com/help/question-tips#questionTips3-4-2
退会済みユーザー

退会済みユーザー

2019/06/05 03:15

初心者なら初心者マークをつけましょう
dokidoki_hamuo

2019/06/05 03:55

すみません、はじめて投稿したのでやり方がわからなかったので初心者マークをつけられることを知りませんでした。今つけてみました。
dokidoki_hamuo

2019/06/05 04:14

エラーについて、今後ご指摘いただいた通りに記載します。勉強になりました。ありがとうございます。
guest

回答1

0

ベストアンサー

githubによると、エラーの原因となるソースは以下の部分です。

#485~494行目 try: return NameObject(name.decode('utf-8')) except (UnicodeEncodeError, UnicodeDecodeError) as e: # Name objects should represent irregular characters # with a '#' followed by the symbol's hex number if not pdf.strict: warnings.warn("Illegal character in Name Object", utils.PdfReadWarning) return NameObject(name) else: raise utils.PdfReadError("Illegal character in Name Object")

pdf.strictのフラグによってエラーとするか警告とするか変えられるので、読み込む前に各pdfオブジェクトのstrict属性をFalseにすれば、エラーを起こさず実行できると思います。

本来エラーとなる部分を警告扱いとして無視する形になるので、微妙な解決法ではありますが…

pdf1_file = open('test1.pdf','rb') pdf2_file = open('test2.pdf','rb') #追加部分 pdf1_file.strict=False pdf2_file.strict=False pdf1_reader = PyPDF2.PdfFileReader(pdf1_file) pdf2_reader = PyPDF2.PdfFileReader(pdf2_file)

ただ、根本的な原因はUnicodeEncodeError, UnicodeDecodeErrorの部分なので、そこを解消しないと、仮に読み込めても所望の結果が得られないかもしれません。

投稿2019/06/06 00:24

amahara_waya

総合スコア1029

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

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

dokidoki_hamuo

2019/06/06 00:51

ありがとうございます!!ちゃんと作動し、PDFも合体されていました。感激です!! 根本的な原因はUnicodeEncodeError, UnicodeDecodeErrorとのことですが、ネットで調べてみた例として foo ( str ); を foo ( str.decode('utf-8') ); に直す、というようなことが記載されていました。 該当するコードはどの部分であるか、教えていただくことは可能でしょうか。 見当違いな質問でしたらすみません。
amahara_waya

2019/06/06 02:05

回答内のソースにreturn NameObject(name.decode('utf-8'))とあるので、多分質問者さんが考えてる方法はすでに行われていますね。しかもその過程で問題のUnicodeDecodeErrorが発生してるので、その解決策は微妙だと思います。 エンコードについてそこまで語れるわけじゃないので断言はできませんが、以下の記事など試してみるといいかもしれません。 http://shu223.hatenablog.com/entry/20111201/1328334689
dokidoki_hamuo

2019/06/06 02:44

ご丁寧にありがとうございました!また何かありましたらよろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問