[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()
メソッドを使用して、セル内の不要な空白を削除します。 - データ型の変換: 数値データを
int
やfloat
に変換することで、計算が可能になります。
以下に、データの整形と加工の例を示します。
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ファイルの自動処理を試してみてください。