Home » Python » python-docxの使い方 » python-docxでWordの表データを1列ずつリストに

python-docxでWordの表データを1列ずつリストに

動作検証バージョン:64bit版 Windows 10 Pro + Python 3.8.0 + python-docx 0.8.10

Word文書内の表を、行ごとにPythonのリストにするというニーズのほうが多そうですけれど、列ごとにリストにしたいという場合もあるでしょう。

[スポンサードリンク]

Wordの表データを1行ずつリストにするサンプル

以下のスクリプトで、Cドライブtempフォルダーに存在するfoo.docxファイルの1つ目の表データを、列ごとにリストにできる様子を確認できます。

import docx

doc = docx.Document(r'c:\temp\foo.docx')
tbl = doc.tables[0]

for col in tbl.columns:
    values = []
    for cell in col.cells:
        values.append(cell.text)
    print(values)

2重ループの部分は、リスト内包表記を使えば、以下のとおりです。

for col in tbl.columns:
    values = [ cell.text for cell in col.cells ]
    print(values)

サンプルスクリプトで行っている処理

上記のスクリプトで行っている処理は、もちろん行ごとにリストを作成するスクリプトとよく似ています。
行を表すオブジェクトを取得していた部分が、列を表すオブジェクトになっている点だけが異なります。

Tableオブジェクトに用意されているcolumns属性で、表内のすべての列を表す_Columnsオブジェクトを取得します。
  for col in tbl .columns:
>>> type(tbl.columns)
<class 'docx.table._Columns'>

すべての列を表す_Columnsオブジェクトから、for文で各列を表す_Columnオブジェクトを取得して、変数colに代入してます。
  for col in tbl.columns:

内側のfor文では、_Columnオブジェクトに用意されているcells属性で、個々のセルを表す_Cellオブジェクトを要素として持つ、タプルを取得しています。
      for cell in col.cells:

>>> type(col.cells)
<class 'tuple'>


この後の処理は、行ごとにリストにするスクリプトの場合と同じです。

[スポンサードリンク]

Home » Python » python-docxの使い方 » python-docxでWordの表データを1列ずつリストに

「python-docxの使い方」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.