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
に与えると常に真となります。