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

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

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

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

Q&A

解決済

1回答

963閲覧

【python】PDFのメタファイルの一部が空の場合の対応方法

donadona999s

総合スコア16

Python

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

0グッド

1クリップ

投稿2019/09/11 06:24

お世話になります
エクセルVBAからpythonを読み出して、PDFのプロパティをチェックしているのですが、
メタファイル上のModDateに何もない場合、下記のようなエラーとなります。
これはModDateに何も入っていないので、エラーになっていると思うのですが、
たとえばダミーで「--」などと入れて回避することはできますでしょうか?
その場合どのような記述をしたらいいでしょうか?
python初心者なので、アドバイスいただけますと幸いです。
例えば、以下のリンクのPDFでエラーとなります。
http://www.analog.com/media/en/technical-documentation/evaluation-documentation/adv7182a-adv7280a-32ebz-sch_a.pdf

python

1import os 2import csv 3import shutil 4import requests 5import PyPDF2 6import xlwings as xw 7 8def property_check(): 9 pre_path = os.path.dirname(os.path.abspath(__file__)) 10 path = pre_path.replace('\','/') 11 with open(str(path) + '/part_num.csv') as f: 12 reader = csv.reader(f) 13 for row in reader: 14 filename = row[0] 15 pdf = PyPDF2.PdfFileReader(path + '/DATASHEET/' + filename) 16 Pdf_name = filename 17 for k in pdf.documentInfo.keys(): 18 if k == '/ModDate': 19 ModDate = pdf.documentInfo[k] 20 if k == '/CreationDate': 21 CreationDate = pdf.documentInfo[k] 22 pdf = PyPDF2.PdfFileReader(path + '/DATASHEET/' + filename) 23 number_of_pages = pdf.getNumPages() 24 Size = os.path.getsize(path + '/DATASHEET/' + filename) 25 l = [Pdf_name,CreationDate,ModDate,number_of_pages,Size] 26 with open(path + '/result.csv', 'a') as f: 27 writer = csv.writer(f, lineterminator='\n') 28 writer.writerow(l)

Error

Traceback (most recent call last):

File "<string>", line 1, in <module>

File "c:\users\xxxxxxxxxxxxxxxxxx\property_check.py", line 25, in property_check

l = [Pdf_name,CreationDate,ModDate,number_of_pages,Size]

UnboundLocalError: local variable 'ModDate' referenced before assignment

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

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

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

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

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

guest

回答1

0

ベストアンサー

ModDateが定義されていないのでエラーになっているかと思われます。

たとえばダミーで「--」などと入れて回避することはできますでしょうか?

Python

1ModDate = '--' 2for k in pdf.documentInfo.keys(): 3 if k == '/ModDate': 4 ModDate = pdf.documentInfo[k] 5 if k == '/CreationDate': 6 CreationDate = pdf.documentInfo[k]

投稿2019/09/11 11:46

meg_

総合スコア10579

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

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

donadona999s

2019/09/11 14:25

アドバイスありがとうございます。 変数が空かどうかをIF文で判別しようとしたもののうまくいかず、 教えていただいたシンプルな方法で実現できました。 ありがとうございます。
meg_

2019/09/11 22:01

変数は初期化した方が安全ですよ。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問