Automate Boring Stuff With Python Pt 1
Ich organisiere mich selber u.a. mit Obsidian Notes. Teil meines Flusses ist die Erstellung von Daily Notes mit Aufgaben, Terminen und Notizen zum jeweiligen Tag. Dabei ist der Workflow bisher nur Teilautomatisiert gelaufen: Obsidian erstellt aus einem Template automatisch eine Tagesdatei für den heutigen Tag. Doch wenn ich Dinge für die nächsten Tage schon mal vornotieren möchte, muss ich entweder manuell eine Datei für den jeweiligen Tag erstellen, oder die Notiz woanders zwischenlagern. Aus diesem Grund habe ich mir nun ein kleines Python-Skript erstellt, das mir automatisch am Sonntag Tagesdateien für die kommende Woche erstellt.
Kleine Anmerkungen zu meinem Setup:
- Ich verwalte meine Notizen in Unterordnern für das jeweilige Jahr und den jeweiligen Monat im Pattern
{yyyy}/{yyyy-mm}. Darum sollte das Skript einen Monats oder gar Jahreswechsel verarbeiten können und im Bedarf einen neuen Ordner erstellen. - Meine Tagesdateien sind im Datumsformat
{yyyy-mm-dd} - Für die Öffentlichkeit habe ich meine Standard-Aufgaben, die jeden Tag anfallen, einfach mal weggelassen
- Spezifische Aufgaben oder Termine, die an jeweiligen Wochentagen anfallen, werden aktuell noch nicht automatisch berücksichtigt
- Denkbar wäre auch noch eine Integration aus meinem Kalender, dass Termine automatisch eingetragen werden
#!/usr/bin/python
from datetime import datetime, timedelta
import os
output_base = '/home/user/obsidian-notes/daily-notes'
today = datetime.now()
for i in range(0,7):
current_date = today + timedelta(days=i)
current_year = current_date.year
current_month = current_date.month
current_day = current_date.day
output_dir = os.path.join(output_base, f'{current_year}', f'{current_year}-{current_month}')
if not os.path.exists(output_dir):
os.makedirs(output_dir, exist_ok=True)
print(f'Created new directory {output_dir}')
current_file_name = f'{current_year}-{current_month}-{current_day}.md'
current_file = os.path.join(output_dir, current_file_name)
if os.path.exists(current_file):
print(f'{current_file_name} exists in {output_dir}. Skip creating!')
else:
print(f'Creating {current_file_name} in {output_dir}...')
with open(current_file, 'w') as f:
f.write('---\n')
f.write('tags:\n')
f.write(' - log/daily\n')
f.write(f'date: {current_year}-{current_month}-{current_day}\n')
f.write('---\n')
f.write('\n')
f.write(f'# {current_year}-{current_month}-{current_day}\n')
f.write('\n')
f.write('## Termine\n')
f.write('\n')
f.write('\n')
f.write('## Aufgaben\n')
f.write('- [ ] \n')
f.write('\n')
f.write('## Notizen\n')
f.write('- \n')
print(f'Created {current_file_name} in {output_dir}')
Damit das Skript automatisch einmal die Woche läuft, habe ich in meiner Crontab einen Eintrag:
0 1 * * SUN ~/bin/obsidian_week_creator.py >> ~/logs/obsidian_week_creator.log 2>&1