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 asOrgHeaderobjects. - Clock Entries: Lines starting with
CLOCK:or#+CLK:are parsed asOrgClockobjects. - Tables: Blocks of lines starting with
|are parsed intoOrgTableobjects. - Source Blocks: Code blocks delimited by
#+BEGIN_SRCand#+END_SRCare parsed asOrgSourceBlock. - Math Blocks: LaTeX math blocks delimited by
\[and\]are parsed asOrgMath. - Property Drawers: Blocks delimited by
:PROPERTIES:and:END:are parsed asOrgProperties. - File Variables: Lines like
#+TITLE: My Documentare parsed and stored in the parser'svarsdictionary. - Text and Links: All other lines are treated as plain text (
OrgText), with org-mode links like[[...]]being processed.
export_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:
* Headerbecomes# Header,** Sub-headerbecomes## Sub-header, and so on. - Tables: Org-mode tables are converted to Markdown tables.
- Source Blocks:
#+BEGIN_SRC language ... #+END_SRCbecomes 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,PROPERTIESblocks are currently ignored in the output.
Example
from org_analyze.org2md import export_markdown
markdown_lines = export_markdown('example.org')
for line in markdown_lines:
print(line)
read_clockins 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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file org_analyze-0.1.9-py3-none-any.whl.
File metadata
- Download URL: org_analyze-0.1.9-py3-none-any.whl
- Upload date:
- Size: 15.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
be14fb1825f336a21522c42bfc441bcbf4b1193c18dd15fc2ba3c74cc803cc07
|
|
| MD5 |
5a7c892454aea036289be8fd2f428630
|
|
| BLAKE2b-256 |
e49fc0139ad6e6ec79ec3250608cf843f35e5f700557dba4f290cac9e290bd81
|