Python-DocxモジュールによるPythonでのMS Wordファイルの読み出しと書き込み

Microsoft Office suite の MS Word ユーティリティは、単純なものから複雑なものまで、テキスト文書を作成するために最もよく使われるツールの 1 つです。

Officeソフトウェアがインストールされていれば、人間はMS Word文書を簡単に読み書きできますが、しばしば他のアプリケーション内でWord文書からテキストを読み取る必要があります。

例えば、PythonでMS Wordファイルを入力とする自然言語処理アプリケーションを開発している場合、テキストを処理する前にPythonでMS Wordファイルを読み込む必要があります。

同様に、出力としてMS Word文書にテキストを書き込む必要がある場合も多く、それは例えば、ダウンロードするために動的に生成されたレポートである可能性があります。

この記事では、記事では、PythonでMS Wordファイルを読み書きする方法を参照してください。

Python-Docx ライブラリのインストール

PythonでMS Wordファイルの読み書きを行うためのライブラリはいくつか存在します。

しかし、ここでは使い勝手の良いpython-docxモジュールを使用します。

ターミナルで以下の pip コマンドを実行し、python-docx モジュールをダウンロードします。

$ pip install python-docx


Python-DocxモジュールによるMS Wordファイルの読み込み

このセクションでは、python-docxモジュールを使ってMS Wordファイルからテキストを読み取る方法を説明します。

新しいMS Wordファイルを作成し、”my_word_tex.docx “という名前に変更する。

私はEディレクトリのルートにファイルを保存しましたが、どこに保存してもかまいません。

my_word_file.docxは以下のような内容になっているはずです。

上記のファイルを読み込むには、まず docx モジュールをインポートし、docx モジュールから Document クラスのオブジェクトを生成する。

以下のスクリプトのように、Document クラスのコンストラクタに my_word_file.docx のパスを渡してください。

import docx


doc = docx.Document("E:/my_word_file.docx")


これで、Document クラスのオブジェクト doc を使って my_word_file.docx の内容を読み込むことができるようになりました。

読書段落

ファイルパスを指定して Document クラスのオブジェクトを作成すると、 paragraphs 属性を介してドキュメント内のすべての段落にアクセスすることができます。

空の行も Document によってパラグラフとして読み込まれます。

my_password_file.docxからすべての段落を取得し、ドキュメント内の段落の合計数を表示してみましょう。

all_paras = doc.paragraphs
len(all_paras)


出力します。

10


次に、my_word_pex.docx ファイルにあるすべてのパラグラフを繰り返し印刷する。

for para in all_paras:
    print(para.text)
    print("-------")


出力

-------
Introduction
-------


-------
Welcome to stackabuse.com
-------
The best site for learning Python and Other Programming Languages
-------
Learn to program and write code in the most efficient manner
-------


-------
Details
-------


-------
This website contains useful programming articles for Java, Python, Spring etc.
-------


出力はWordファイル内のすべての段落を表示します。

Paragraphs` プロパティを配列のようにインデックス化することで、特定の段落にアクセスすることもできます。

ファイル中の5番目の段落を表示してみましょう。

single_para = doc.paragraphs[4]
print(single_para.text)


出力してみましょう。

The best site for learning Python and Other Programming Languages


読書マラソン

ワード文書内の行は、類似のフォントサイズ、フォント形状、フォントスタイルなど、類似の特性を持つ連続した単語の列です。

例えば、my_word_file.docxの2行目に “Welcome to stackabuse.com “というテキストがありますが、ここでは “Welcome to “はプレインフォント、”stackabuse.com “は太字で書かれています。

したがって、テキスト「Welcome to」は1本と見なされ、太字のテキスト「stackabuse.com」は別の本と見なされる。

同様に、「Learn to program and write code in the」と「most efficient manner」は、段落「Learn to program and write code in the most efficient manner」において、2つの異なる実行として扱われる。

パラグラフ内のすべての実行を取得するには、 doc オブジェクトの paragraph 属性にある run プロパティを使用することができます。

それでは、パラグラフ番号 5 (4th index) にあるすべての行を読み出してみましょう。

single_para = doc.paragraphs[4]
for run in single_para.runs:
    print(run.text)


出力します。

The best site for
learning Python
 and Other
Programming Languages


同様に、次のスクリプトはmy_word_tery_file.docxファイルの6番目のパラグラフからすべてのrunを表示します。

second_para = doc.paragraphs[5]
for run in second_para.runs:
    print(run.text)


出力

Learn to program and write code in the
most efficient manner


Python-DocxモジュールによるMS Wordファイルの書き込み

前のセクションでは、python-docx モジュールを使って Python で MS Word ファイルを読み込む方法を見ました。

このセクションでは、python-docx モジュールを使って MS Word ファイルを書き込む方法を説明します。

MS Word ファイルを書き込むには、空のコンストラクタを持つ Document クラスのオブジェクトを作成するか、ファイル名を渡さずに作成する必要があります。

mydoc = docx.Document()


パラグラフの書き方

パラグラフを書くには、Document クラスオブジェクトの add_paragraph() メソッドを使用します。

パラグラフを追加したら、Document クラスオブジェクトの save() メソッドを呼び出す必要があります。

パラグラフを書き込むファイルのパスは save() メソッドにパラメータとして渡されます。

ファイルがまだ存在しない場合は新しいファイルが作成され、そうでない場合は既存のMS Wordファイルの末尾に段落が追加されます。

次のスクリプトは、新しく作成されたMS Wordファイル “my_written_keyword.docx “に簡単なパラグラフを書き込む。

mydoc.add_paragraph("This is first paragraph of a MS Word file.")
mydoc.save("E:/my_written_file.docx")


上記のスクリプトを実行すると、save()メソッドで指定したディレクトリに新しいファイル “my_written_tex_file.docx “が作成されます。

このファイルの中には、”This is a first paragraph of a MS Word file. “と書かれた段落が1つあります。

my_written_tex.docxにもう一つ段落を追加してみましょう。

mydoc.add_paragraph("This is the second paragraph of a MS Word file.")
mydoc.save("E:/my_written_file.docx")


この段落は、my_written_terpha.docxの既存のコンテンツの最後に追加されます。

ライティング・ラン

Python-docx` モジュールを使用して、実行を記述することもできます。

Runを書くには、まず、Runを追加したいパラグラフのハンドルを作成する必要があります。

以下の例を見て、どのように行われるかを見てみましょう。

third_para = mydoc.add_paragraph("This is the third paragraph.")
third_para.add_run(" this is a section at the end of third paragraph")
mydoc.save("E:/my_written_file.docx")


上のスクリプトでは、Document クラスのオブジェクト mydocadd_paragraph() メソッドを使用してパラグラフを記述しています。

add_paragraph()メソッドは新しく追加されたパラグラフのハンドルを返します。

新しいパラグラフにランを追加するには、パラグラフハンドルに対してadd_run()メソッドを呼び出す必要があります。

ランのテキストは文字列の形でadd_run()メソッドに渡されます。

最後に、save()` メソッドを呼び出して実際のファイルを作成する必要があります。

ヘッダーの書き方

MS Wordのファイルにヘッダを追加することもできます。

これを行うには、add_heading() メソッドを呼び出す必要があります。

add_heading()` メソッドの最初のパラメータはヘッダーのテキスト文字列で、2番目のパラメータはヘッダーサイズです。

ヘッダーのサイズは0から始まり、0がトップレベルのヘッダーとなります。

以下のスクリプトは、ファイルmy_written_file.docxにレベル0、1、2の3つのヘッダーを追加します。

mydoc.add_heading("This is level 1 heading", 0)
mydoc.add_heading("This is level 2 heading", 1)
mydoc.add_heading("This is level 3 heading", 2)
mydoc.save("E:/my_written_file.docx")


画像を追加する

MS Wordのファイルに画像を追加するには、add_picture() メソッドを使用します。

画像へのパスは add_picture() メソッドのパラメータとして渡される。

また、画像の幅と高さは docx.shared.Inches() 属性を用いて指定することができます。

次のスクリプトは、ローカルファイルシステムからmy_written_tica.docxのWordファイルに画像を追加します。

画像の幅と高さはそれぞれ5インチと7インチになる。

mydoc.add_picture("E:/eiffel-tower.jpg", width=docx.shared.Inches(5), height=docx.shared.Inches(7))
mydoc.save("E:/my_written_file.docx")


Writing MS Word Files with Python-Docx Moduleにあるスクリプトをすべて実行すると、最終的にmy_written_keyword.docxファイルは次のようになります。

出力には、MSワードファイルに追加した3つのパラグラフと、3つのヘッダー、そして1つの画像が表示されています。

結論

この記事では、python-docx モジュールを使って MS Word ファイルを読み書きする方法について簡単に説明しました。

この記事では、MS Word ファイルの中から段落や行を読み取る方法について説明しました。

最後に、MS Word ファイルの書き方、MS Word ファイルへの段落の追加、実行、ヘッダー、画像の追加について説明しました。

タイトルとURLをコピーしました