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 函数来读取并添加第一个和最后一个字符为“|”的行到一个表(可以是一个列表对象,其中每个项目都是表的一行)。

如果您有多个表,则一行不以“|”开头是“表结束”的提示。

相关内容