コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Python】python-pptx で画像ファイルの名前を取得する方法

概要

from pptx import Presentation
from pptx.enum.shapes import MSO_SHAPE_TYPE

if __name__ == '__main__':

    ppt = Presentation("【.pptx のファイルパス】")

    for slide in ppt.slides:
        for shape in slide.shapes:
            if shape.shape_type == MSO_SHAPE_TYPE.PICTURE:
                print(shape.image.filename)

最初は、上記のように shape.image.filename を使えば
.pptx に含まれているすべての画像ファイルの名前を取得できるかと思ったのですが、
どの画像ファイルも「image.png」が返ってきてしまって
正しいファイル名が取得できませんでした

f:id:baba_s:20191212131943p:plain

.pptx を .zip に変更して展開して、
各スライドの .xml に画像ファイル名が記述されていないか確認したところ、
.xml には画像ファイルの名前が保存されていました

なんとかこのパラメータを python-pptx で取得できないか調べてみたら

上記のサイト様でやり方が紹介されていました

from pptx import Presentation
from pptx.enum.shapes import MSO_SHAPE_TYPE

if __name__ == '__main__':

    ppt = Presentation("【.pptx のファイルパス】")

    for slide in ppt.slides:
        for shape in slide.shapes:
            if shape.shape_type == MSO_SHAPE_TYPE.PICTURE:
                print(shape._pic.nvPicPr.cNvPr.get('descr'))

自分の環境ではこのコードで .pptx のすべてのスライドに存在する
画像ファイルの名前を取得できました

参考サイト様