hermina/prestrukturiraj.py

103 lines
4.3 KiB
Python

import os
import shutil
import re
def prestrukturiraj_spletno_stran():
"""
Skripta prestrukturira spletno stran tako, da vsako .html datoteko
(razen index.html v korenu) premakne v svojo mapo in jo preimenuje v index.html.
Na koncu posodobi vse povezave v vseh HTML datotekah.
"""
korenski_direktorij = '.'
datoteke_za_obdelavo = []
mapa_povezav = {}
# --- FAZA 1: Najdi vse .html datoteke, ki jih je treba premakniti ---
print("--- Faza 1: Iskanje HTML datotek za prestrukturiranje ---")
for pot, mape, datoteke in os.walk(korenski_direktorij):
# Izognemo se sistemskim in skritim mapam
if any(part in pot for part in ['.git', '.vscode', '__pycache__']):
continue
for datoteka in datoteke:
# Obdelamo samo .html datoteke, ki niso že index.html
if datoteka.endswith('.html') and datoteka != 'index.html':
ime_brez_koncnice = datoteka[:-5]
stara_pot = os.path.join(pot, datoteka)
# Posebna obravnava za "omeni.html", kot je bilo zahtevano
if ime_brez_koncnice == "omeni":
ime_nove_mape = "o-meni"
else:
ime_nove_mape = ime_brez_koncnice
nova_mapa_pot = os.path.join(pot, ime_nove_mape)
nova_datoteka_pot = os.path.join(nova_mapa_pot, 'index.html')
datoteke_za_obdelavo.append({
'stara_pot': stara_pot,
'nova_mapa_pot': nova_mapa_pot,
'nova_datoteka_pot': nova_datoteka_pot
})
# Shranimo preslikavo za kasnejšo zamenjavo povezav
mapa_povezav[datoteka] = ime_nove_mape + '/'
if not datoteke_za_obdelavo:
print("Ni datotek za prestrukturiranje. Postopek končan.")
return
# --- FAZA 2: Ustvari mape, premakni in preimenuj datoteke ---
print("\n--- Faza 2: Ustvarjanje map in prestavljanje datotek ---")
for info in datoteke_za_obdelavo:
stara_pot = info['stara_pot']
nova_mapa_pot = info['nova_mapa_pot']
nova_datoteka_pot = info['nova_datoteka_pot']
try:
os.makedirs(nova_mapa_pot, exist_ok=True)
print(f" -> Ustvarjena mapa: {nova_mapa_pot}")
shutil.move(stara_pot, nova_datoteka_pot)
print(f" -> Datoteka '{stara_pot}' uspešno prestavljena v '{nova_datoteka_pot}'")
except Exception as e:
print(f"NAPAKA pri prestavljanju '{stara_pot}': {e}")
# --- FAZA 3: Posodobi vse povezave v vseh HTML datotekah ---
print("\n--- Faza 3: Posodabljanje povezav v vseh HTML datotekah ---")
vse_html_datoteke = []
for pot, _, datoteke in os.walk(korenski_direktorij):
if any(part in pot for part in ['.git', '.vscode', '__pycache__']):
continue
for datoteka in datoteke:
if datoteka.endswith('.html'):
vse_html_datoteke.append(os.path.join(pot, datoteka))
for html_datoteka in vse_html_datoteke:
try:
with open(html_datoteka, 'r', encoding='utf-8') as f:
vsebina = f.read()
originalna_vsebina = vsebina
# Zamenjaj povezave na podlagi ustvarjene mape
for stara_datoteka, nova_pot in mapa_povezav.items():
# Regularni izraz, ki najde href="...stara_datoteka.html" in ga zamenja
vzorec = re.compile(f'href=(["\'])([^"\'#?]*?){re.escape(stara_datoteka)}(["\'])')
vsebina = vzorec.sub(f'href=\\1\\2{nova_pot}\\3', vsebina)
# Posebna obravnava za glavno datoteko index.html, da postane relativna pot "/"
vzorec_index = re.compile(f'href=(["\'])index.html(["\'])')
vsebina = vzorec_index.sub('href=\\1/\\2', vsebina)
if vsebina != originalna_vsebina:
with open(html_datoteka, 'w', encoding='utf-8') as f:
f.write(vsebina)
print(f" -> Posodobljene povezave v datoteki: {html_datoteka}")
except Exception as e:
print(f"NAPAKA pri posodabljanju povezav v '{html_datoteka}': {e}")
# Zaženi glavno funkcijo
if __name__ == "__main__":
prestrukturiraj_spletno_stran()
print("\nPrestrukturiranje spletne strani je končano.")