Pythonは組織文書から組織スキーマテーブルを抽出できますか?

Pythonは組織文書から組織スキーマテーブルを抽出できますか?

指定されたテーブルを読み取るためにPythonコードを書こうとしています。組織モデル文書。たとえば、ファイルがあります。~/foo.org

$ cat ~/foo.org
#+Title: Example Org Document

* Section One

Proin quam nisl, tincidunt et, mattis eget, convallis nec, purus.

#+TBLNAME: table1
| i     | want    | python | to     |
|-------+---------+--------+--------|
| read  | this    | table  | only   |
| 1     | 3       | 2      | 4      |
|-------+---------+--------+--------|
| i     | want    | the    | dashed |
| lines | ignored | by     | python |

#+TBLNAME: table2
|    i | don't |  need | python | to |
|------+-------+-------+--------+----|
| read |  this | table |      9 |  8 |
|    7 |     6 |     5 |      4 |  3 |
|    2 |     1 |     0 |     22 | 17 |

私のファイルがあまり複雑ではない場合は、次のように言います。

$ cat ~/bar.org
| i     | want    | python | to     |
| read  | this    | table  | only   |
| 1     | 3       | 2      | 4      |
| i     | want    | the    | dashed |
| lines | ignored | by     | python |

その後、テーブルをPythonとして読み取ることができます。

import csv
csv.DictReader(open('~/bar.org'), delimiter='|')

より複雑なテーブルから目的のテーブルを解析する方法はありますか~/foo.org

答え1

必要な入力形式を制御する場合、最も簡単な方法はファイル全体をPythonに読み込み、正規表現を使用して目的のテーブルを抽出してcsvに渡すことです。

import csv, re
data = open("foo.org").read()
mo = re.search("TBLNAME: table1\n.*?\n(\n|$)", data, re.S)
mytable = mo.group(0)
d = csv.DictReader(mytable.splitlines(), delimiter='|')

mytableたとえば、ここに表示する行を分割して、文字列をcsvリーダーの反復可能項目に変換する必要があります。

答え2

Python関数を作成して、最初と最後の文字が "|"の行を読み込み、テーブル(各エントリがテーブルの行であるリストオブジェクトである可能性があります)に追加できます。

複数のテーブルがある場合、「|」で始まらない行は「テーブルの終わり」ヒントです。

関連情報