Pythonを実際に動かしてみよう!今回のお題は、Python×Word。ビギナーも取り掛かりやすい、サンプルコードとライブラリをご紹介します。【読むだけでも、なるほど】と思っていただけるよう、関連トピックも多く記載。プログラムでWordファイルを一括編集する方法をぜひ習得してみてください。
また、本記事のご感想をお送りいただいた方に、抽選で書籍『いきなりプログラミングPython(翔泳社)』をプレゼント。詳細は記事の最後に。
メーカー勤務機械系エンジニア。WATLABブログ運営者。工学計算に関する知識の習得を目指し、Pythonの学習を2019年から始める。仕事以外にも、趣味のプログラミングやPythonコミュニティへの参加を行っている。また、月間数万PVのPythonブログ「WATLAB」を立ち上げ、初心者向けに図を多くしたわかりやすい記事を作成・公開している。著書は『いきなりプログラミング Python』(翔泳社)。
ブログ:https://watlab-blog.com/
1.「面倒だな」と思ったらプログラミングで解決しよう
現代ではどんな仕事をしていても文章を書く業務が少なからずあります。ソフトウェアの仕様を説明するドキュメント、人に業務を教えるためのマニュアル…など、その種類は多岐にわたります。文章を書くツールもさまざまありますが、Microsoft Excelを使っている会社は同じOffice製品であるWordを使うことが多いのではないでしょうか。
Word業務の中でも「文字列の置換」は使用頻度の高い操作です。単一のWordファイルであれば、Word標準の機能を使って文書内の文字列を置換できますが、大量のファイルを一括で置換するには少し工夫が必要です。
この記事ではPythonを使って複数のWordファイル内文字列を一括で置換する方法を紹介します。PythonでWordを編集する方法の第1歩として、PCをお持ちの方はぜひ実際にコードを実行してみてください。
2. Pythonプログラミングの準備
■Pythonプログラミング環境の構築
Pythonプログラミングの環境は「最速でPython環境を構築してプログラミングをはじめよう」を参照してください。リンク先にはPythonのインストール方法、プログラムの記述・実行方法、外部ライブラリのインストール方法をまとめています。
▼Pythonのインストールがまだの方はこちらから!
■必要なライブラリのインストール
jupyter lab
コマンドを実行する手前)。(1)python-docx
python-docxは、PythonでWordファイルを作成・編集するための外部ライブラリです。.docxファイルを操作するためには次のコマンドでインストールします。
pip install python-docx
外部ライブラリのインストールが終了したら、以下のコマンドを入力して、JupyterLabを立ち上げましょう。立ち上がったらNotebookと書かれている下のアイコンをクリックします。
jupyter lab
3. サンプルファイル
この記事のコードをすぐに試せるように、3種類の.docxファイルをサンプルとして用意しました。手元にWordのファイルがない場合は以下のリンクからダウンロードしてお使いください。
▼クリックするとWordファイルがダウンロードされます。
■sample1
https://www.r-staffing.co.jp/rasisa/wp-content/uploads/2025/02/sample1.docx
■sample2
https://www.r-staffing.co.jp/rasisa/wp-content/uploads/2025/02/sample2.docx
■sample3
https://www.r-staffing.co.jp/rasisa/wp-content/uploads/2025/02/sample3.docx
サンプルファイルの中身は次の通りです。いずれも異なる「技術」について書かれている短い文章です。
現代の情報技術は、社会のあらゆる分野に革命をもたらしています。人工知能やビッグデータ解析などの技術は、ビジネスの効率化や新しいサービスの創出に貢献しています。これらの技術を適切に活用することで、持続可能な社会の実現が期待されています。
医療分野における技術の進歩は、患者の治療法や診断方法を大きく変えています。遺伝子編集技術やロボット手術など、最新の医療技術は、これまで不可能だった治療を可能にし、患者の生活の質を向上させています。技術の発展は健康な未来への鍵となります。
環境問題に対処するためのクリーンエネルギー技術が注目されています。太陽光発電や風力発電などの再生可能エネルギー技術は、化石燃料に依存しない持続可能なエネルギー供給を目指しています。これらの技術の普及は、地球温暖化の抑制に重要な役割を果たします。
4. まずはWordファイルを開いてみる
まずはWordのファイルである.docxを開いて中身を確認します。 次のコードを書いて実行してみましょう。
from docx import Document
# ファイル名を指定してWordファイルを読み込む
input_path = 'sample1.docx'
doc = Document(input_path)
# ドキュメントのすべての段落を表示
for para in doc.paragraphs:
print(para.text)
コードを実行するとファイル名で指定した「sample1.docx 」の中身が出力されます。
Pythonのforループはこのインデントされた部分が繰り返し処理されます。
5. 単一のWordファイル内の文字を置換してみよう
ドキュメントの読み込みができたので、早速文字列の置換をしてみましょう。「技術」という単語を「テクノロジー」に変換するために、次のコードの修正を行います。
from docx import Document # ファイル名を指定してWordファイルを読み込む input_path = 'sample1.docx' doc = Document(input_path) # 置換する文字列 # ここから追加 replace_target = '技術' replace_with = 'テクノロジー' # ここまで追加 # 置換処理(コメント変更) for para in doc.paragraphs: if replace_target in para.text: # 追加 para.text = para.text.replace(replace_target, replace_with) # 追加 print(para.text)
ここで実行結果を確認してみましょう。コードを実行すると次の文章が出力されているはずです。プログラムで指定した通り、「技術」が「テクノロジー」に置換されていますね。
「現代の情報テクノロジーは、社会のあらゆる分野に革命をもたらしています。人工知能やビッグデータ解析などのテクノロジーは、ビジネスの効率化や新しいサービスの創出に貢献しています。これらのテクノロジーを適切に活用することで、持続可能な社会の実現が期待されています。」
6. プログラムを関数化しよう
非常に簡単なコードでWordファイルを開き、単語の置換ができました。ここまでで基本的な置換プログラムは完了してしまいましたので、あとは複数ファイルへこの処理を適用させることができれば完成です。ただし、上記コードをファイル名を変えて何回も書くというのはナンセンス。
Pythonに限らず、プログラミングでは同じ処理をできるだけ書かないようにするのが一般的です。そのために今回はさきほどまでのコードを関数で書き換えます。
次のコードはこれまでのコードを全体的に関数に書き換えたものです。
from docx import Document def docx_replace_text(input_path, replace_target, replace_with): """.docxファイル内の文字列を置換する関数""" # ファイル名を指定してWordファイルを読み込む doc = Document(input_path) # 置換処理 for para in doc.paragraphs: if replace_target in para.text: para.text = para.text.replace(replace_target, replace_with) print(para.text) return # ファイルのパスと置換する文字列 input_path = 'sample1.docx' replace_target = '技術' replace_with = 'テクノロジー' # 関数の実行 docx_replace_text(input_path, replace_target, replace_with)
7. 複数のWordファイルに対応させよう
複数のファイルを一括編集する処理を書くとき、その複数のファイルをすべて手入力していては本末転倒です。プログラム実行フォルダに入っているすべての.docxファイルをリストにする処理を追加しましょう。ファイルのパスを操作するにはpathlib
というPython標準ライブラリを使用するのが一般的です。
次のコード修正を行います。ここではPath.cwd()
でプログラム実行フォルダの場所を取得し、.glob(*.docx)
でそこにある.docxファイルのみをすべて取得しています。この段階でinput_path
の行は削除しておきます。そして関数を実行する部分で取得した.docxのファイルを1つずつforで処理します。
from docx import Document from pathlib import Path # 追加 def docx_replace_text(input_path, replace_target, replace_with): <省略> return # 置換する文字列 input_path = 'sample1.docx' # 削除 replace_target = '技術' replace_with = 'テクノロジー' # プログラム実行フォルダ内の.docxファイルをリストする # ここから追加 current_dir = Path.cwd() docx_files = list(current_dir.glob("*.docx")) # ここまで追加 # 関数の実行 for input_path in docx_files: # 追加 docx_replace_text(input_path, replace_target, replace_with) # インデントを追加
このコードを実行する場合、あらかじめ置換処理したいすべての.docxファイルをプログラム実行フォルダに置いておいてください。
コードを実行すると置換処理後のテキストがファイル数の数だけ出力されます。
8. ファイルを保存しよう
あとは置換後の.docxファイルを保存すれば完了です。同じ場所にファイルを保存してしまうと元のファイルが上書きされてしまったり、同じようなファイル名が隣り合って紛らわしくなったりするため、保存するファイルは別でフォルダを作成するという処理も追加します。
次のコードを追加しましょう。
from docx import Document from pathlib import Path def docx_replace_text(input_path, output_path, replace_target, replace_with): # output_pathを追加 """.docxファイル内の文字列を置換する関数""" <省略> print(para.text) # ファイルを保存する # 追加 doc.save(output_path) # 追加 return <省略> docx_files = list(current_dir.glob("*.docx")) # 出力フォルダを作成(存在しない場合のみ) # ここから追加 output_dir = current_dir / "replaced" output_dir.mkdir(exist_ok=True) # ここまで追加 # 関数の実行 for input_path in docx_files: output_path = output_dir / input_path.name # 追加 docx_replace_text(input_path, output_path, replace_target, replace_with) # output_pathを追加
current_dir
と「replaced」という文字列を使ってパスの連結を行っています。32行目の.mkdir()
でreplacedというフォルダを作成します。.mkdir
の引数であるexist_ok
をTrue
にしておくことで、replacedフォルダが存在しない場合のみ新規フォルダを作成するという動作をします。output_path
という保存ファイルのパスを関数の引数に新規設定します(4行目と37行目)。このoutput_path
(36行目)は元のファイルの名前(input_path.name
)を再利用して保存先をreplacedフォルダにしたものです。input_path
とoutput_path
の内容が変わるので毎回新しいファイルが作成されます。9. 全体のコードはこちらから
この記事ではPythonでWordを制御する方法とともに、簡単なファイル処理の方法も学びました。ただし、分量の都合から基本的な内容のみに絞っています。
そしてこのプログラムはまだまだ改良の余地があります。万能な置換処理プログラムにするためには、表やテキストBoxの文章も置換できるようにするのが良いでしょう。
今回は「段落」の文章のみ置換処理の対象としています。表やテキストBox内の文章も取得するように改良することでより汎用的なプログラムになるでしょう。python-docxライブラリの公式ページにはさまざまなAPIが公開されているので、Pythonに興味を持った方は是非挑戦してみてください。
python-docx公式ドキュメント:https://python-docx.readthedocs.io/en/latest/
from docx import Document from pathlib import Path def docx_replace_text(input_path, output_path, replace_target, replace_with): """.docxファイル内の文字列を置換する関数""" # ファイル名を指定してWordファイルを読み込む doc = Document(input_path) # 置換処理 for para in doc.paragraphs: if replace_target in para.text: para.text = para.text.replace(replace_target, replace_with) print(para.text) # ファイルを保存する doc.save(output_path) return # 置換する文字列 replace_target = '技術' replace_with = 'テクノロジー' # プログラム実行フォルダ内の.docxファイルをリストする current_dir = Path.cwd() docx_files = list(current_dir.glob("*.docx")) # 出力フォルダを作成(存在しない場合のみ) output_dir = current_dir / "replaced" output_dir.mkdir(exist_ok=True) # 関数の実行 for input_path in docx_files: output_path = output_dir / input_path.name docx_replace_text(input_path, output_path, replace_target, replace_with)
また、Excelの表に置換したい単語リストを記入しておき、異なる複数の置換処理を一括で行うプログラムに改良しても良いかもしれません。Pythonはとても書きやすい言語です。あなたの無限のアイデアを具現化してみてください。
10. 書籍をプレゼント!
アンケートにご協力いただいた方の中から抽選で書籍『いきなりプログラミングPython(翔泳社)』をプレゼントします。その名の通り、「いきなり」作りはじめる入門書!ご応募お待ちしています。
※本記事に記載されている会社名、製品名はそれぞれ各社の商標および登録商標です。