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