指定されたテーブルを読み取るために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関数を作成して、最初と最後の文字が "|"の行を読み込み、テーブル(各エントリがテーブルの行であるリストオブジェクトである可能性があります)に追加できます。
複数のテーブルがある場合、「|」で始まらない行は「テーブルの終わり」ヒントです。