103 lines
4.3 KiB
Python
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.") |