0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Python python-docxライブラリとフリーソフト「縮小専用。」でフォルダ中の写真のサムネイルを貼り付けたdocxファイルを作成する

Last updated at Posted at 2020-09-18

Python 3.8でpython-docxライブラリとフリーソフト「縮小専用。」を使用してあるフォルダのサブフォルダに含まれるJPEGファイルのサムネイルを貼り付けたdocxファイルを作成するサンプルコードです。

いつかの自分のためにpython-docx、subprocess等の参考として記載します。

コード

import docx
import subprocess
from pathlib import Path


rootpath = Path(r"<写真フォルダをまとめたフォルダのパス>")
shukusenpath = Path(r"<縮小専用。のパス>")
thumbdirname = "thumb"  # 縮小専用。で指定したサブフォルダの名前

for folderpath in rootpath.glob("*"):
    if not folderpath.is_dir():
        continue
    newfilepath = rootpath / (folderpath.stem + ".docx")
    if newfilepath.is_file():
        continue
    thumbpath = folderpath / thumbdirname

    # JPEGのみ貼り付け
    # 他の拡張子も貼り付ける場合はここを編集します。
    picpaths = list(folderpath.glob("*.jpg"))
    if len(picpaths) == 0:
        continue
    subprocess.run([shukusenpath, *picpaths])

    doc = docx.Document()
    for picpath in picpaths:
        thumbpicpath = thumbpath / picpath.name
        try:
            doc.add_picture(str(thumbpicpath))
            doc.add_paragraph()
            doc.add_page_break()
        except Exception:
            pass
    doc.save(newfilepath)

メモ

  • python-docxpip install python-docxでインストールできます。
  • pathlib.Path/演算子でパスを結合できます。
  • subprocessは第1引数に実行ファイルと引数のリストを与えることで実行ファイルを起動して終了を待ちます。
  • リテラルと展開後のリストやジェネレータを要素とするリストを作成するには[literal, *list, *generator]のようにします。*はリストやジェネレータの展開です。
  • docx.Document.add_picturepathlib.Pathを直接与えるとエラーが発生します。str(pathlib.Path)で文字列に変換することで回避できます。
  • pathlib.Pathではstemは括弧不要ですが、通常の用法でis_dir()は括弧必須です。is_dirはエラーにはなりませんが、メソッドそのものを返すのでifに与えると常に真となります。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?