54 lines
2.0 KiB
Python
54 lines
2.0 KiB
Python
import os
|
|
import re
|
|
|
|
"""
|
|
Dieses Python-Skript durchsucht rekursiv alle .md-Dateien in einem angegebenen Quellordner nach Mediawiki-Links und konvertiert diese in korrekte Markdown-Links.
|
|
Für jeden gefundenen Mediawiki-Link wird eine Eingabeaufforderung im Terminal angezeigt, um die geplante Änderung zu bestätigen oder abzulehnen.
|
|
Wenn die Änderung bestätigt wird, ersetzt das Skript den Mediawiki-Link durch den Markdown-Link und speichert die Datei.
|
|
"""
|
|
|
|
# Quellordner definieren
|
|
# source_folder = './test/'
|
|
source_folder = '/Users/rob/Documents/Obsidian'
|
|
|
|
# Mediawiki Link Pattern
|
|
mediawiki_link_pattern = re.compile(r'\[(http.?://[^\s]+)\s([^\]]+)\]')
|
|
|
|
def convert_links_in_file(file_path):
|
|
with open(file_path, 'r', encoding='utf-8') as file:
|
|
content = file.read()
|
|
|
|
def replace_link(match):
|
|
#ignoriere Mediawiki-Links, die als Anzeigetext eine URL haben
|
|
if match.group(2).startswith('[http') or match.group(1) == match.group(2):
|
|
return match.group(0)
|
|
#ignoriere strings, einen Zeilenumbruch enthalten
|
|
if match.group(0).find('\n') != -1:
|
|
return match.group(0)
|
|
|
|
url = match.group(1)
|
|
text = match.group(2)
|
|
markdown_link = f'[{text}]({url})'
|
|
print(f'Original: {match.group(0)}')
|
|
print(f'Änderung: {markdown_link}')
|
|
confirm = input('Änderung bestätigen? (Enter für Ja, jede andere Taste für Nein): ')
|
|
if confirm == '':
|
|
return markdown_link
|
|
else:
|
|
return match.group(0)
|
|
|
|
new_content = mediawiki_link_pattern.sub(replace_link, content)
|
|
|
|
with open(file_path, 'w', encoding='utf-8') as file:
|
|
file.write(new_content)
|
|
|
|
def process_folder(folder):
|
|
for root, _, files in os.walk(folder):
|
|
for file in files:
|
|
if file.endswith('.md'):
|
|
file_path = os.path.join(root, file)
|
|
print(f'Verarbeite Datei: {file_path}')
|
|
convert_links_in_file(file_path)
|
|
|
|
# Starte die Verarbeitung
|
|
process_folder(source_folder) |