LoginSignup
0
0

More than 3 years have passed since last update.

python版のemacs-orgパーサー orgparse のお試し

Last updated at Posted at 2020-05-09

emacs-lispが書けないので、pythonでorg-modeのパーサ探したらあったのでお試し。
サンプルorgファイルの読み込みと、読み込み結果のorgテキスト化を試します。

公式ドキュメントはこちら。
https://orgparse.readthedocs.io/en/latest/

今回使うのは以下のサンプル。

$ cat sample.org
* Heading 1
   :PROPERTIES:
   :ID:       48c4a07e-95c1-41ff-a1f0-8e2f6ad88761
   :END:
** TODO [#B] Heading 2
   DEADLINE: <2020-05-09 Sat>
** DONE Heading 2
   CLOSED: [2020-05-09 Sat 22:21]
*** Heading 3
    SCHEDULED: <2020-05-09 Sat>
* Heading 1      :ARCHIVE:

まずは必要なパッケージのインストール。
読み込みと書き込みでパッケージが別々になっています。

$ pip install orgparse orger

読み書きのサンプルコードは以下。

$ cat org-parse.py
from orgparse import load
from orger import inorganic

root = load('sample.org')

print('--- for node in root[1:] ---')
# 上の行のノードから順に実行
for node in root[1:]:
    print(node.heading)

# 上の階層のノードから順に実行
print('--- for node in root.children ---')
# for node in root.children
for node in root.children:
    print(node.heading)

# 書き込み用のパッケージへのコピー
def get_node(node):
    children = [get_node(child) for child in node.children]
    scheduled = None if node.scheduled is None else node.scheduled.start

    return inorganic.node(
        heading=node.heading, # タイトル読み込み
        todo=node.todo, # TODO, DONE など読み込み
        tags=node.tags, # タグ読み込み
        scheduled=scheduled, # scheduled 読み込み, 読み込みはdeadlineもあり
        properties=node.properties, # 個別読み込みは node.get_property('ID')
        body=node.body, # 中身の読み込み
        children=children
    )
print('--- write to org file ---')
for node in root.children:
    node = get_node(node) 
    print(node.render())

実行結果

$ python3 org-parse.py
--- for node in root[1:] ---
Heading 1
Heading 2
Heading 2
Heading 3
Heading 1
--- for node in root.children ---
Heading 1
Heading 1
--- write to org file ---
* Heading 1
:PROPERTIES:
:ID: 48c4a07e-95c1-41ff-a1f0-8e2f6ad88761
:END:
** TODO Heading 2
** DONE Heading 2
*** Heading 3
SCHEDULED: <2020-05-09 Sat>
* Heading 1 :ARCHIVE:

簡単に org ファイルの読み書きが出来ました。
これで todo の集計などが python スクリプトで書けそうです。
なお、2020/05/09 現時点では書き込み専用パッケージの inorganic 側が closed や deadline に対応していない模様。
※ 読み込みは問題なくできます

orgの書き込みパッケージはまだ仮段階で、APIの検討中らしいです。
関連 issue : https://github.com/karlicoss/orgparse/issues/11

ちなみに、今回の関連リポジトリは以下の通り。全部同じ方が作ってくださっています。

特に orger というパッケージは github, pdf, tiwtter などを org 化し、
あらゆる情報を org で管理することが目標のようです。
evernote の emacs-org 版みたいなものですかね。いずれ使ってみたいです。

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0