Microsoft Office

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

PythonでWordファイルから表を抽出するには、python-docxライブラリを使用します。このライブラリは、Word文書を操作するための便利なツールを提供します。

まず、Documentクラスを使用してWordファイルを読み込みます。次に、tablesプロパティを利用して文書内のすべての表を取得できます。

各表はTableオブジェクトとして扱われ、行やセルのデータにアクセスすることが可能です。これにより、Word文書内の表データを簡単に抽出し、処理することができます。

PythonでWordファイルを読み込む方法

python-docxライブラリの紹介

PythonでWordファイルを操作するためには、python-docxというライブラリが非常に便利です。

このライブラリは、Wordファイルの読み書きを簡単に行うことができ、特に表や段落の操作に強みを持っています。

python-docxを使用することで、Wordファイルの内容をプログラムで自在に操作することが可能になります。

  • インストール方法: pip install python-docx
  • 主な機能:
  • Wordファイルの読み込みと書き込み
  • 段落や表の操作
  • スタイルの適用

Wordファイルを開く基本的なコード

Wordファイルを開くためには、まずpython-docxライブラリをインポートし、Documentクラスを使用します。

以下に基本的なコードを示します。

from docx import Document
# Wordファイルを開く
doc = Document('sample.docx')
# ドキュメントの内容を表示
for paragraph in doc.paragraphs:
    print(paragraph.text)

このコードでは、sample.docxというWordファイルを開き、その中の段落を順に表示しています。

Documentクラスを使うことで、Wordファイルの内容にアクセスすることができます。

ドキュメントオブジェクトの理解

Documentオブジェクトは、Wordファイル全体を表すオブジェクトであり、ファイル内の段落や表にアクセスするためのインターフェースを提供します。

以下に、Documentオブジェクトの主な属性とメソッドを示します。

属性/メソッド説明
paragraphsドキュメント内のすべての段落をリストとして取得します。
tablesドキュメント内のすべての表をリストとして取得します。
add_paragraph(text)新しい段落を追加します。
add_table(rows, cols)新しい表を追加します。

Documentオブジェクトを理解することで、Wordファイルの内容を効率的に操作することが可能になります。

例えば、paragraphs属性を使って段落を取得し、tables属性を使って表を操作することができます。

Wordファイルから表を抽出する手順

表の抽出に必要なメソッド

Wordファイルから表を抽出するためには、Documentオブジェクトのtables属性を使用します。

この属性は、ドキュメント内のすべての表をリストとして提供します。

各表はTableオブジェクトとして扱われ、行やセルにアクセスするためのメソッドが用意されています。

  • tables属性: ドキュメント内のすべての表を取得するために使用します。
  • Tableオブジェクト: 各表を表し、行やセルにアクセスするためのメソッドを提供します。

表データのループ処理

表のデータを処理するためには、Tableオブジェクトのrows属性を使用して、各行をループ処理します。

以下に、表データをループ処理する基本的なコードを示します。

from docx import Document
# Wordファイルを開く
doc = Document('sample.docx')
# ドキュメント内のすべての表を取得
for table in doc.tables:
    # 各表の行をループ処理
    for row in table.rows:
        # 各行のセルをループ処理
        for cell in row.cells:
            print(cell.text)

このコードでは、sample.docx内のすべての表を取得し、各表の行とセルを順に表示しています。

rows属性を使うことで、表の各行にアクセスすることができます。

セルデータの取得方法

セルデータを取得するためには、Rowオブジェクトのcells属性を使用します。

この属性は、行内のすべてのセルをリストとして提供します。

各セルはCellオブジェクトとして扱われ、text属性を使用してセル内のテキストを取得します。

  • cells属性: 行内のすべてのセルを取得するために使用します。
  • text属性: セル内のテキストを取得するために使用します。

以下に、特定のセルデータを取得する例を示します。

from docx import Document
# Wordファイルを開く
doc = Document('sample.docx')
# 最初の表の最初の行の最初のセルのデータを取得
first_table = doc.tables[0]
first_row = first_table.rows[0]
first_cell = first_row.cells[0]
print(first_cell.text)

このコードでは、sample.docx内の最初の表の最初の行の最初のセルのデータを取得しています。

cells属性を使うことで、特定のセルにアクセスし、その内容を取得することができます。

抽出した表データの加工と保存

データの整形と加工

抽出した表データをそのまま使用するのではなく、必要に応じて整形や加工を行うことが重要です。

データの整形とは、データを見やすくしたり、分析しやすくするためにフォーマットを変更することを指します。

例えば、不要な空白を削除したり、特定のフォーマットに変換することが含まれます。

  • 空白の削除: strip()メソッドを使用して、セル内の不要な空白を削除します。
  • データ型の変換: 数値データをintfloatに変換することで、計算が可能になります。

以下に、データの整形と加工の例を示します。

from docx import Document
# Wordファイルを開く
doc = Document('sample.docx')
# データの整形と加工
processed_data = []
for table in doc.tables:
    for row in table.rows:
        row_data = [cell.text.strip() for cell in row.cells]
        processed_data.append(row_data)
print(processed_data)

このコードでは、各セルのテキストから空白を削除し、整形されたデータをリストに格納しています。

CSVファイルへの保存

整形したデータをCSVファイルに保存することで、他のアプリケーションでの利用が容易になります。

Pythonのcsvモジュールを使用して、データをCSV形式で保存することができます。

import csv
from docx import Document
# Wordファイルを開く
doc = Document('sample.docx')
# データの整形と加工
processed_data = []
for table in doc.tables:
    for row in table.rows:
        row_data = [cell.text.strip() for cell in row.cells]
        processed_data.append(row_data)
# CSVファイルに保存
with open('output.csv', 'w', newline='', encoding='utf-8') as csvfile:
    writer = csv.writer(csvfile)
    writer.writerows(processed_data)

このコードでは、整形されたデータをoutput.csvというファイルに保存しています。

csv.writerを使用することで、リスト形式のデータをCSVファイルに書き込むことができます。

Excelファイルへの保存

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

このライブラリを使うことで、Excelファイルの読み書きが可能になります。

from openpyxl import Workbook
from docx import Document
# Wordファイルを開く
doc = Document('sample.docx')
# データの整形と加工
processed_data = []
for table in doc.tables:
    for row in table.rows:
        row_data = [cell.text.strip() for cell in row.cells]
        processed_data.append(row_data)
# Excelファイルに保存
wb = Workbook()
ws = wb.active
for row_data in processed_data:
    ws.append(row_data)
wb.save('output.xlsx')

このコードでは、整形されたデータをoutput.xlsxというExcelファイルに保存しています。

Workbookオブジェクトを使用して新しいExcelファイルを作成し、appendメソッドでデータを追加しています。

応用例:複数のWordファイルから表を抽出

フォルダ内のファイルを一括処理

複数のWordファイルから表を抽出する場合、フォルダ内のすべてのファイルを一括で処理することが効率的です。

Pythonのosモジュールを使用して、指定したフォルダ内のすべてのWordファイルを取得し、順次処理を行います。

import os
from docx import Document
# フォルダ内のすべてのWordファイルを取得
folder_path = 'word_files'
word_files = [f for f in os.listdir(folder_path) if f.endswith('.docx')]
# 各ファイルを処理
for file_name in word_files:
    file_path = os.path.join(folder_path, file_name)
    doc = Document(file_path)
    # ここで表の抽出処理を行う

このコードでは、word_filesフォルダ内のすべての.docxファイルをリスト化し、各ファイルを順に開いて処理しています。

抽出データの統合

複数のファイルから抽出したデータを統合することで、データの一元管理が可能になります。

抽出したデータをリストに追加し、最終的に一つのデータセットとしてまとめます。

import os
from docx import Document
# フォルダ内のすべてのWordファイルを取得
folder_path = 'word_files'
word_files = [f for f in os.listdir(folder_path) if f.endswith('.docx')]
# 抽出データの統合
all_data = []
for file_name in word_files:
    file_path = os.path.join(folder_path, file_name)
    doc = Document(file_path)
    for table in doc.tables:
        for row in table.rows:
            row_data = [cell.text.strip() for cell in row.cells]
            all_data.append(row_data)
print(all_data)

このコードでは、各ファイルから抽出した表データをall_dataリストに追加し、すべてのデータを統合しています。

エラーハンドリングと例外処理

複数のファイルを処理する際には、ファイルの読み込みエラーやデータの不整合など、さまざまな問題が発生する可能性があります。

これらの問題を適切に処理するために、エラーハンドリングと例外処理を実装します。

import os
from docx import Document
# フォルダ内のすべてのWordファイルを取得
folder_path = 'word_files'
word_files = [f for f in os.listdir(folder_path) if f.endswith('.docx')]
# 抽出データの統合
all_data = []
for file_name in word_files:
    file_path = os.path.join(folder_path, file_name)
    try:
        doc = Document(file_path)
        for table in doc.tables:
            for row in table.rows:
                row_data = [cell.text.strip() for cell in row.cells]
                all_data.append(row_data)
    except Exception as e:
        print(f"Error processing {file_name}: {e}")
print(all_data)

このコードでは、tryブロックを使用してファイルの読み込みとデータ抽出を行い、exceptブロックでエラーをキャッチしてエラーメッセージを表示しています。

これにより、処理が中断されることなく、他のファイルの処理を続行することができます。

応用例:抽出した表データの可視化

Matplotlibを使ったグラフ化

抽出した表データを視覚的に表現することで、データの傾向やパターンをより理解しやすくなります。

Matplotlibは、Pythonでグラフを作成するための強力なライブラリです。

以下に、抽出したデータを棒グラフとして可視化する例を示します。

import matplotlib.pyplot as plt
# サンプルデータ
data = {'Category A': 10, 'Category B': 15, 'Category C': 7}
# データをグラフ化
categories = list(data.keys())
values = list(data.values())
plt.bar(categories, values)
plt.title('Sample Data Visualization')
plt.xlabel('Categories')
plt.ylabel('Values')
plt.show()

このコードでは、dataという辞書形式のデータを棒グラフとして表示しています。

Matplotlibを使用することで、簡単にデータを視覚化することができます。

Pandasでのデータフレーム化

Pandasは、データの操作や分析に特化したライブラリで、データをデータフレームとして扱うことができます。

データフレームを使用することで、データの整形やフィルタリングが容易になります。

import pandas as pd
# サンプルデータ
data = [
    ['Category A', 10],
    ['Category B', 15],
    ['Category C', 7]
]
# データをデータフレームに変換
df = pd.DataFrame(data, columns=['Category', 'Value'])
print(df)

このコードでは、リスト形式のデータをPandasのデータフレームに変換しています。

データフレームを使用することで、データの操作が直感的に行えます。

データのフィルタリングと分析

データフレームを使用することで、特定の条件に基づいてデータをフィルタリングしたり、分析を行うことができます。

以下に、特定の条件に基づいてデータをフィルタリングする例を示します。

import pandas as pd
# サンプルデータ
data = [
    ['Category A', 10],
    ['Category B', 15],
    ['Category C', 7]
]
# データをデータフレームに変換
df = pd.DataFrame(data, columns=['Category', 'Value'])
# 条件に基づいてデータをフィルタリング
filtered_df = df[df['Value'] > 10]
print(filtered_df)

このコードでは、Valueが10より大きいデータのみをフィルタリングして表示しています。

Pandasを使用することで、データのフィルタリングや分析が効率的に行えます。

まとめ

Pythonを使ってWordファイルから表を抽出し、データを加工・保存する方法を学びました。

python-docxライブラリを活用することで、Wordファイルの読み書きや表の操作が簡単に行えることがわかりました。

これを機に、実際のプロジェクトでWordファイルの自動処理を試してみてください。

関連記事

Back to top button