PythonでPowerpoint(パワーポイント)ファイル内のテキストや画像を抜き出す

PythonでPowerPointファイル内のテキストや画像を抜き出す方法を紹介します。

色々パワポで資料作ると、あの内容を書いた資料どこにあるっけ?とか、あの画像使いまわしたいけどどこでしたっけ?と探すのに手間がかかることありませんか?

パワポ内のテキストを検索するならWindowsのファイル検索機能でもいいけど、遅いしイマイチだし、画像さがすにはパワポ開くの面倒だし・・・。

このような悩みを抱えているひとは是非Python-pptxを活用してみて下さい(ほかの方法もあるかもだけど)。

Python-pptxならパワポファイル内のテキストや画像を探しだすことは簡単にできるので、是非今回紹介する方法で業務が効率化出来るか試してみて下さい。

スポンサーリンク

PythonでPowerPointファイルを操作する方法を覚えよう

PythonでPowerPointファイルを操作する方法は以前に紹介したので、参考にしてください。

PythonでPowerpoint(パワーポイント)を自動化【Python-pptxの使い方】
PowerPoint(パワポ)ドキュメント作成をPythonで自動化する方法について紹介します。Python-pptxと呼ばれるモジュールを使用することで、Pythonでパワポを操作することが出来るようになります。恐らく、...
PythonでPowerpoint(パワーポイント)を自動化【テキストの装飾】
PowerPoint(パワポ)ドキュメント作成をPythonで自動化する方法について紹介します。前回の記事では、PythonでPowerpoint(パワポ)を操作するためのモジュール「Python-pptx」の基礎的な使い方を説明...
PythonでPowerpoint(パワーポイント)作成を自動化【画像の貼り付け】
PowerPoint(パワポ)ドキュメント作成をPythonで自動化する方法について紹介します。前々回の記事では「Python-pptx」の基礎的な使い方、。前回の記事では、「テキストの装飾」について説明しました。今回は、...
PythonでPowerpoint(パワーポイント)を自動化:グラフ(チャート)の作成を自動化
PowerPoint(パワポ)ドキュメント作成をPythonで自動化する方法について紹介します。今回は、パワーポイントでグラフ(チャート)を自動化する方法を説明したいと思います。今回扱うグラフは散布図です。PowerPoi...


スポンサーリンク

PowerPointファイルから画像を抜き出す

PowerPointファイルでのテキストを探すためには、PowerPointファイルのスライド内にShape(オブジェクト)を調べ、オブジェクトがimage属性を持つか調べます。ShapeはPresentationのスライドの構成要素(図や表等の要素)を扱う為のオブジェクトです。

スライドの中のShapeがimage属性を持つか調べるには、hasattrを使います。hasattrはPythonの組み込み関数です。

hasattr(オブジェクト, '属性名')

スライド内にshapeがimage属性を持つかは、hasattr(オブジェクト, ‘image’)のようにして調べます。

hasattrでimage属性をもつshapeが見つかったら保存します。image属性を持つshapeを調べると、Imageオブジェクトであることがわかります。
画像はバイナリデータですので、バイナリデータを書き出す為には、以下のようにします。

Imageオブジェクト.image.blob

画像を抽出する際に気を付ける点は以上です。

では、実際にソースコードを見てみましょう。

from pptx import Presentation
import os 
ppt_path = r"/home/hoge/Desktop/test.pptx"

#PowerPointファイルを開く(=Presentaionオブジェクトを作る)
prs = Presentation(ppt_path)
image_no = 0

for slide in prs.slides:
    #スライド内のshapeオブジェクトを1個ずつ取り出す
    for shape in slide.shapes:
        #スライド内のshapeオブジェクトがimage属性があるか調べる
        if hasattr(shape, "image"):
            print(shape, type(shape))
            image_no += 1
            #保存する為のファイル名設定
            image_filename = shape.image.filename
            save_image_filename = os.path.join(save_path, str(image_no) + image_filename)
            #保存
            with open(save_image_filename, "wb") as f:
                f.write(shape.image.blob)
スポンサーリンク

PowerPointファイル内のテキストを検索する

やりかたは、画像を抜き出す方法とほとんど同じです。違うのは、画像を探すか?テキストを探すかです。

テキストを探す方法は、画像を探すとき同じで、hasattrの第2引数を”image”を”text”に変えれば良いだけです。つまり、hasattr(オブジェクト, ‘text’)とすれば良いだけです。

“text”属性を持つオブジェクトは、Shape、SlidePlaceholderオブジェクトでしょう。

ShapeオブジェクトであろうとSlidePlaceholderオブジェクトであろうと、”text”属性で返されるのはStringオブジェクトなので、見つかった後は普通のテキスト処理をすれば良いだけです。

ppt_path = r"/home/hoge/Desktop/test.pptx"
prs = Presentation(ppt_path)

#スライド1個ずつ取り出す
slide_number = 0
for slide in prs.slides:
    slide_number += 1
    #スライド内のshapeオブジェクトを1個ずつ取り出す
    for shape in slide.shapes:
        #スライド内のshapeオブジェクトがimage属性があるか調べる
        if hasattr(shape, "text"):
            print(shape.text) #=> <class 'str'>なので、あとは普通にテキスト処理するだけ
タイトルとURLをコピーしました