Skip to main content

Collect data from org-mode/org-roam pages and do some simple analyzing it.

Project description

OrgAnalyze

Collect data from org-mode/org-roam pages and do some simple analyzing it

Items Parsed by ParserOrg

The parser processes the following org-mode elements, turning them into specific Python objects:

  • Headers: Lines starting with *, **, etc. are parsed as OrgHeader objects.
  • Clock Entries: Lines starting with CLOCK: or #+CLK: are parsed as OrgClock objects.
  • Tables: Blocks of lines starting with | are parsed into OrgTable objects.
  • Source Blocks: Code blocks delimited by #+BEGIN_SRC and #+END_SRC are parsed as OrgSourceBlock.
  • Math Blocks: LaTeX math blocks delimited by \[ and \] are parsed as OrgMath.
  • Property Drawers: Blocks delimited by :PROPERTIES: and :END: are parsed as OrgProperties.
  • File Variables: Lines like #+TITLE: My Document are parsed and stored in the parser's vars dictionary.
  • Text and Links: All other lines are treated as plain text (OrgText), with org-mode links like [[...]] being processed.

export_org_to_markdown from org2md

Converts an org-mode file into a list of Markdown strings. It handles various org elements like headers, tables, source code blocks, and text.

Conversion Rules

  • Headers: * Header becomes # Header, ** Sub-header becomes ## Sub-header, and so on.
  • Tables: Org-mode tables are converted to Markdown tables.
  • Source Blocks: #+BEGIN_SRC language ... #+END_SRC becomes a fenced code block in Markdown (```language ... ```).
  • Math Blocks: \[ ... \] becomes a fenced math block.
  • Links: Org-mode links are converted. [[id:some-id][My Link]] becomes [[My Link]] and [[https://example.com][Example]] becomes [Example](https://example.com).
  • Text: Plain text lines are preserved.
  • Ignored: CLOCK, PROPERTIES blocks are currently ignored in the output.

Example

from org_analyze.org2md import export_org_to_markdown

markdown_lines = export_markdown('example.org')
for line in markdown_lines:
    print(line)

read_org_clocks_2 from clocks

This function parses all *.org files in a given directory. It extracts all clocking information and associates it with its parent header (Feature) and sub-header (Task).

The function returns a tuple containing a list of column names and a list of rows. This structure is ideal for creating a pandas DataFrame.

Example Usage

Let's say you have an org file tasks.org in a directory called my_orgs with the following content:

* Feature A
** Task 1
CLOCK: [2025-10-25 Sat 10:00]--[2025-10-25 Sat 11:30] =>  1:30
** Task 2
CLOCK: [2025-10-25 Sat 12:00]--[2025-10-25 Sat 13:00] =>  1:00

* Feature B
** Task 3
CLOCK: [2025-10-25 Sat 14:00]--[2025-10-25 Sat 14:30] =>  0:30

You can parse this file and analyze the data with pandas like this:

import pandas as pd
from org_analyze.clocks import read_clockins

# 1. Parse the org files in the directory
columns, rows = read_clockins('my_orgs')

# 2. Create a pandas DataFrame
df = pd.DataFrame(rows, columns=columns)

# 3. Analyze the data: Group by feature (head1) and sum the duration
feature_hours = df.groupby('head1')['duration'].sum()

print("Total hours per feature:")
print(feature_hours)

Output:

Total hours per feature:
head1
Feature A    2.5
Feature B    0.5
Name: duration, dtype: float64

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

org_analyze-0.1.7-py3-none-any.whl (7.7 kB view details)

Uploaded Python 3

File details

Details for the file org_analyze-0.1.7-py3-none-any.whl.

File metadata

  • Download URL: org_analyze-0.1.7-py3-none-any.whl
  • Upload date:
  • Size: 7.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for org_analyze-0.1.7-py3-none-any.whl
Algorithm Hash digest
SHA256 ca59e693b2c9897b71aa6c2f827767df8a342d4c2a2c2fe9eefeca6c2af43c83
MD5 a01d4782b724fbdb132d0a8ded40825f
BLAKE2b-256 e2eb0fd957167efef9276ee8738b299dcfb7470f3957dc0c2ddd2a898a4765cf

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page