import os import re
def rename_markdown_files(directory="."):
# Cerca di gestire diversi tipi di trattini (en-dash, em-dash, hyphen)
pattern = re.compile(r"## \*\*\d+ [–\-] (.*?)\*\*")
# Nuovo pattern:
# ^# -> Inizia con #
# .*? -> Qualsiasi carattere fino ai primi asterischi (include spazio e emoji)
# \*\*(.*?)\*\* -> Cattura tutto ciò che è tra i doppi asterischi
pattern = re.compile(r"^# .*? \*\*(.*?)\*\*")
# Pattern universale:
# ^# -> Inizia con #
# .*? -> Salta qualsiasi cosa (spazi, emoji, numeri) finché non trova **
# \*\* -> Trova l'apertura del grassetto
# (.*?) -> Cattura il titolo (Gruppo 1)
# \*\* -> Trova la chiusura del grassetto
pattern = re.compile(r"^#.*?\*\*(.*?)\*\*")
for filename in os.listdir(directory):
if filename.endswith(".md") and filename[:1].isdigit():
filepath = os.path.join(directory, filename)
try:
with open(filepath, 'r', encoding='utf-8') as f:
first_line = f.readline().strip()
match = pattern.search(first_line)
if match:
# Estrae il titolo (es: Comparison Operators)
title = match.group(1).strip()
# Sostituisce spazi e caratteri speciali non ammessi nei nomi file
clean_title = title.replace(" ", "_")
clean_title = re.sub(r'[\\/*?:"<>|]', "", clean_title)
# Costruisce il nuovo nome: 01_Comparison_Operators.md
prefix = filename.split('.')[0]
new_filename = f"{prefix}_{clean_title}.md"
new_filepath = os.path.join(directory, new_filename)
# Rinomina il file
os.rename(filepath, new_filepath)
print(f"Rinominato: {filename} -> {new_filename}")
else:
print(
f"Salto {filename}: Formato prima riga non corrispondente.")
except Exception as e:
print(f"Errore durante l'elaborazione di {filename}: {e}")
if name == "main":
rename_markdown_files()