【Python】Wordファイルを読み込んで表を抽出する方法

この記事では、初心者でもわかりやすいように、Pythonのライブラリを使ってWordファイルを読み込み、表を抽出し、データを保存する手順を詳しく解説します。

具体的なコード例も紹介するので、実際に手を動かしながら学ぶことができます。

目次から探す

Wordファイルの読み込み

Pythonを使ってWordファイルを読み込むためには、python-docxというライブラリを使用します。

このライブラリを使うことで、Wordファイルの内容を簡単に操作することができます。

以下では、python-docxを使ったWordファイルの読み込み方法と、読み込んだファイルの基本的な操作について解説します。

python-docxを使ったWordファイルの読み込み

まずは、python-docxライブラリをインストールする必要があります。

以下のコマンドを実行してインストールしてください。

pip install python-docx

インストールが完了したら、次にWordファイルを読み込むためのコードを書いていきます。

以下は、python-docxを使ってWordファイルを読み込む基本的なコード例です。

from docx import Document
# Wordファイルを読み込む
doc = Document('example.docx')
# ドキュメントの内容を表示する
for paragraph in doc.paragraphs:
    print(paragraph.text)

このコードでは、Documentクラスを使ってWordファイルを読み込み、paragraphs属性を使ってドキュメント内の段落を取得しています。

各段落のテキストをループで回して表示しています。

読み込んだファイルの基本的な操作

python-docxを使うことで、読み込んだWordファイルの内容を様々な方法で操作することができます。

ここでは、いくつかの基本的な操作方法を紹介します。

段落の取得と操作

先ほどの例では、ドキュメント内の段落を取得して表示しましたが、特定の段落を操作することもできます。

例えば、特定のキーワードを含む段落を探して、その内容を変更することができます。

from docx import Document
# Wordファイルを読み込む
doc = Document('example.docx')
# 特定のキーワードを含む段落を探して内容を変更する
for paragraph in doc.paragraphs:
    if 'キーワード' in paragraph.text:
        paragraph.text = '新しい内容'
# 変更を保存する
doc.save('modified_example.docx')

テーブルの取得と操作

Wordファイル内にテーブルが含まれている場合、そのテーブルを取得して操作することもできます。

以下は、ドキュメント内の最初のテーブルを取得して、その内容を表示するコード例です。

from docx import Document
# Wordファイルを読み込む
doc = Document('example.docx')
# ドキュメント内の最初のテーブルを取得
table = doc.tables[0]
# テーブルの内容を表示
for row in table.rows:
    for cell in row.cells:
        print(cell.text)

このコードでは、tables属性を使ってドキュメント内のテーブルを取得し、各セルの内容を表示しています。

画像の取得と操作

Wordファイル内に画像が含まれている場合、その画像を取得して操作することもできます。

以下は、ドキュメント内の画像を取得して保存するコード例です。

from docx import Document
# Wordファイルを読み込む
doc = Document('example.docx')
# ドキュメント内の画像を取得して保存
for rel in doc.part.rels.values():
    if "image" in rel.target_ref:
        img = rel.target_part.blob
        with open("extracted_image.png", "wb") as f:
            f.write(img)

このコードでは、part.relsを使ってドキュメント内のリレーションシップを取得し、画像を含むリレーションシップを探して画像データを保存しています。

以上が、python-docxを使ったWordファイルの読み込みと基本的な操作方法です。

次のセクションでは、Wordファイル内の表を抽出する方法について詳しく解説します。

Wordファイル内の表の抽出

Wordファイル内の表を抽出するためには、まず表が存在するかどうかを確認し、その後に表を抽出する方法を学びます。

ここでは、Pythonのライブラリであるpython-docxを使用して、Wordファイル内の表を操作する方法を解説します。

表の存在確認

まず、Wordファイル内に表が存在するかどうかを確認する方法を見ていきましょう。

python-docxライブラリを使用すると、ドキュメント内の表を簡単に確認できます。

以下は、Wordファイル内に表が存在するかどうかを確認するサンプルコードです。

from docx import Document
# Wordファイルを読み込む
doc = Document('sample.docx')
# ドキュメント内の表を取得
tables = doc.tables
# 表が存在するかどうかを確認
if tables:
    print("表が存在します。")
else:
    print("表は存在しません。")

このコードでは、doc.tablesを使用してドキュメント内のすべての表を取得し、それが空でないかどうかを確認しています。

表の抽出方法

表が存在することを確認したら、次にその表を抽出する方法を見ていきましょう。

ここでは、単一の表を抽出する方法と、複数の表を抽出する方法について解説します。

単一の表を抽出する方法

単一の表を抽出する場合、doc.tablesのインデックスを使用して特定の表を取得します。

以下は、最初の表を抽出するサンプルコードです。

from docx import Document
# Wordファイルを読み込む
doc = Document('sample.docx')
# 最初の表を取得
first_table = doc.tables[0]
# 表の内容を表示
for row in first_table.rows:
    for cell in row.cells:
        print(cell.text)

このコードでは、doc.tables[0]を使用して最初の表を取得し、その内容を表示しています。

複数の表を抽出する方法

複数の表を抽出する場合、doc.tablesをループしてすべての表を取得します。

以下は、ドキュメント内のすべての表を抽出して表示するサンプルコードです。

from docx import Document
# Wordファイルを読み込む
doc = Document('sample.docx')
# すべての表を取得
for table in doc.tables:
    print("新しい表:")
    for row in table.rows:
        for cell in row.cells:
            print(cell.text)
    print("\n")

このコードでは、doc.tablesをループして各表を取得し、その内容を表示しています。

各表の内容を区別するために、「新しい表:」というメッセージを表示しています。

これで、Wordファイル内の表の存在確認と抽出方法について理解できました。

次は、抽出した表のデータをどのように処理するかについて解説します。

抽出した表のデータ処理

Wordファイルから抽出した表データをどのように処理するかについて解説します。

表データの構造を理解し、行や列の取得、セルのデータ取得方法を学びましょう。

表データの構造

Wordファイル内の表は、行と列から構成されています。

各行には複数のセルが含まれ、各セルにはテキストデータが格納されています。

python-docxライブラリを使用すると、これらの構造を簡単に操作できます。

以下は、Wordファイルから抽出した表データの基本的な構造を示す例です。

from docx import Document
# Wordファイルを読み込む
doc = Document('sample.docx')
# 最初の表を取得
table = doc.tables[0]
# 表の行数と列数を表示
print(f'行数: {len(table.rows)}')
print(f'列数: {len(table.columns)}')

表データの操作

表データを操作するための基本的な方法を紹介します。

具体的には、行と列の取得方法、セルのデータ取得方法について説明します。

行と列の取得

表の行と列を取得する方法を見ていきましょう。

python-docxでは、table.rowstable.columnsを使用して行と列を取得できます。

以下は、表の全ての行と列を取得して表示する例です。

# 全ての行を取得して表示
for row in table.rows:
    row_data = [cell.text for cell in row.cells]
    print(row_data)
# 全ての列を取得して表示
for col_idx in range(len(table.columns)):
    col_data = [row.cells[col_idx].text for row in table.rows]
    print(col_data)

セルのデータ取得

特定のセルのデータを取得する方法を見ていきましょう。

行と列のインデックスを指定してセルのデータを取得できます。

以下は、特定のセルのデータを取得して表示する例です。

# 特定のセルのデータを取得
row_idx = 1  # 2行目(インデックスは0から始まる)
col_idx = 2  # 3列目(インデックスは0から始まる)
cell_data = table.cell(row_idx, col_idx).text
print(f'セルのデータ: {cell_data}')

このようにして、Wordファイルから抽出した表データを自由に操作することができます。

次のセクションでは、抽出した表データをCSVやExcelファイルに保存する方法について解説します。

抽出した表データの保存

Wordファイルから抽出した表データをどのように保存するかについて解説します。

保存方法としては、CSVファイル、Excelファイル、データベースへの保存が一般的です。

それぞれの方法について、具体的な手順とサンプルコードを紹介します。

CSVファイルへの保存

CSV(Comma-Separated Values)ファイルは、データをテキスト形式で保存するためのシンプルなフォーマットです。

Pythonでは、csvモジュールを使って簡単にCSVファイルにデータを保存できます。

以下に、抽出した表データをCSVファイルに保存する方法を示します。

import csv
from docx import Document
# Wordファイルを読み込む
doc = Document('sample.docx')
# 最初の表を抽出する
table = doc.tables[0]
# CSVファイルに保存する
with open('output.csv', 'w', newline='', encoding='utf-8') as csvfile:
    writer = csv.writer(csvfile)
    for row in table.rows:
        row_data = [cell.text for cell in row.cells]
        writer.writerow(row_data)

このコードでは、sample.docxというWordファイルから最初の表を抽出し、そのデータをoutput.csvというCSVファイルに保存しています。

Excelファイルへの保存

Excelファイルにデータを保存するには、openpyxlというライブラリを使用します。

openpyxlは、Excelファイルの読み書きをサポートする強力なライブラリです。

以下に、抽出した表データをExcelファイルに保存する方法を示します。

import openpyxl
from docx import Document
# Wordファイルを読み込む
doc = Document('sample.docx')
# 最初の表を抽出する
table = doc.tables[0]
# 新しいExcelワークブックを作成する
wb = openpyxl.Workbook()
ws = wb.active
# 表データをExcelシートに書き込む
for i, row in enumerate(table.rows):
    for j, cell in enumerate(row.cells):
        ws.cell(row=i+1, column=j+1, value=cell.text)
# Excelファイルに保存する
wb.save('output.xlsx')

このコードでは、sample.docxというWordファイルから最初の表を抽出し、そのデータをoutput.xlsxというExcelファイルに保存しています。

データベースへの保存

データベースにデータを保存するには、sqlite3モジュールを使用します。

sqlite3は、Pythonに標準で組み込まれている軽量なデータベースエンジンです。

以下に、抽出した表データをSQLiteデータベースに保存する方法を示します。

import sqlite3
from docx import Document
# Wordファイルを読み込む
doc = Document('sample.docx')
# 最初の表を抽出する
table = doc.tables[0]
# SQLiteデータベースに接続する
conn = sqlite3.connect('output.db')
cursor = conn.cursor()
# テーブルを作成する
cursor.execute('''
CREATE TABLE IF NOT EXISTS word_table (
    id INTEGER PRIMARY KEY,
    column1 TEXT,
    column2 TEXT,
    column3 TEXT
)
''')
# 表データをデータベースに挿入する
for row in table.rows:
    row_data = [cell.text for cell in row.cells]
    cursor.execute('INSERT INTO word_table (column1, column2, column3) VALUES (?, ?, ?)', row_data)
# 変更を保存して接続を閉じる
conn.commit()
conn.close()

このコードでは、sample.docxというWordファイルから最初の表を抽出し、そのデータをoutput.dbというSQLiteデータベースに保存しています。

テーブルの列数や名前は、実際のデータに合わせて調整してください。

以上の方法を使えば、Wordファイルから抽出した表データをさまざまな形式で保存することができます。

用途に応じて適切な保存方法を選んでください。

実践例

ここでは、実際にPythonを使ってWordファイルから表を抽出し、それをCSVやExcelファイルに保存する方法を具体的なコード例とともに解説します。

単一の表を抽出してCSVに保存する例

まずは、Wordファイルから単一の表を抽出し、それをCSVファイルに保存する方法を見ていきましょう。

必要なライブラリのインストール

以下のコマンドを実行して、必要なライブラリをインストールします。

pip install python-docx pandas

コード例

以下のコードは、Wordファイルから最初の表を抽出し、それをCSVファイルに保存する例です。

import docx
import pandas as pd
# Wordファイルを読み込む
doc = docx.Document('sample.docx')
# 最初の表を取得
table = doc.tables[0]
# 表のデータをリストに変換
data = []
for row in table.rows:
    row_data = [cell.text for cell in row.cells]
    data.append(row_data)
# データをDataFrameに変換
df = pd.DataFrame(data)
# CSVファイルに保存
df.to_csv('output.csv', index=False, header=False)

コードの解説

  1. docx.Documentを使ってWordファイルを読み込みます。
  2. doc.tables[0]で最初の表を取得します。
  3. 表の各行をループし、各セルのテキストをリストに追加します。
  4. 取得したデータをPandasのDataFrameに変換します。
  5. df.to_csvを使ってCSVファイルに保存します。

複数の表を抽出してExcelに保存する例

次に、Wordファイルから複数の表を抽出し、それをExcelファイルに保存する方法を見ていきましょう。

必要なライブラリのインストール

以下のコマンドを実行して、必要なライブラリをインストールします。

pip install python-docx pandas openpyxl

コード例

以下のコードは、Wordファイルからすべての表を抽出し、それぞれを別々のシートに保存する例です。

import docx
import pandas as pd
# Wordファイルを読み込む
doc = docx.Document('sample.docx')
# Excelライターを作成
writer = pd.ExcelWriter('output.xlsx', engine='openpyxl')
# 各表をループして取得
for i, table in enumerate(doc.tables):
    # 表のデータをリストに変換
    data = []
    for row in table.rows:
        row_data = [cell.text for cell in row.cells]
        data.append(row_data)
    
    # データをDataFrameに変換
    df = pd.DataFrame(data)
    
    # Excelファイルに保存(シート名は'table_1', 'table_2', ...)
    df.to_excel(writer, sheet_name=f'table_{i+1}', index=False, header=False)
# Excelファイルを保存
writer.save()

コードの解説

  1. docx.Documentを使ってWordファイルを読み込みます。
  2. pd.ExcelWriterを使ってExcelライターを作成します。
  3. 各表をループし、表のデータをリストに変換します。
  4. 取得したデータをPandasのDataFrameに変換します。
  5. df.to_excelを使って各表を別々のシートに保存します。
  6. 最後に、writer.saveを使ってExcelファイルを保存します。

これで、Wordファイルから表を抽出し、それをCSVやExcelファイルに保存する方法が理解できたと思います。

実際に手を動かして試してみてください。

目次から探す