Vai al contenuto
PROMPTARIO
ScriptRISORSA 528

Audit dei link Markdown per l’amministrazione

PubblicatoWeb: da classificare

Script Python in sola lettura per elencare destinazioni relative mancanti e collegamenti esterni nel settore amministrazione, con verifica sulla fonte.

Strumenti
Python 3.10+
Livello
Intermedio
Setup
4 min
Risultato
Codice

A cosa serve

Script Python in sola lettura per elencare destinazioni relative mancanti e collegamenti esterni nel settore amministrazione, con verifica sulla fonte.

Quando usarlo

Quando il tuo obiettivo è ottenere questo risultato: Un resoconto in sola lettura per l’amministrazione, con anomalie e limiti visibili e nessuna modifica automatica.

Cosa preparare

  • Salva il codice come audit_amministrazione_link_markdown.py.
  • Eseguilo localmente passando un file o una cartella di prova, senza dati sensibili non necessari.
Istruzioni complete della risorsa
  1. Salva il codice come audit_amministrazione_link_markdown.py.
  2. Eseguilo localmente passando un file o una cartella di prova, senza dati sensibili non necessari.
  3. Controlla ogni segnalazione sul materiale originale prima di correggere o condividere dati.

Configura la risorsa

Variabili

Questo contenuto non contiene variabili compilabili. Leggi le istruzioni prima di copiarlo.

I valori restano in questa pagina e si perdono alla chiusura. Non inserire password o dati sensibili non necessari.

Controlla

Completa le variabili, poi premi “Controlla il prompt”.

Verifica se il tuo caso richiede fonti aggiornate o ricerca web.

Prompt

import argparse import csv import hashlib import json import re from collections import Counter from pathlib import Path from urllib.parse import urlparse MODE = "link-markdown" CONTEXT = "l’amministrazione" REQUIRED_FIELDS = ["id","pratica","scadenza"] parser = argparse.ArgumentParser(description="Audit dei link Markdown: elencare destinazioni relative mancanti e collegamenti esterni.") parser.add_argument("percorso", type=Path, help="File o cartella da analizzare in sola lettura") args = parser.parse_args() path = args.percorso def print_csv_report(file_path): with file_path.open(newline="", encoding="utf-8-sig", errors="replace") as handle: rows = list(csv.DictReader(handle)) headers = list(rows[0].keys()) if rows else [] print(f"Contesto: {CONTEXT}; righe: {len(rows)}; colonne: {len(headers)}") if MODE == "duplicati-csv": key = REQUIRED_FIELDS[0] counts = Counter((row.get(key) or "").strip() for row in rows) for value, count in counts.most_common(): if value and count > 1: print(f"duplicato {key}={value!r}: {count}") elif MODE == "campi-vuoti-csv": for line, row in enumerate(rows, 2): missing = [field for field in REQUIRED_FIELDS if not (row.get(field) or "").strip()] if missing: print(f"riga {line}: campi vuoti {', '.join(missing)}") elif MODE == "righe-incoerenti-csv": for line, row in enumerate(rows, 2): if None in row: print(f"riga {line}: celle oltre le intestazioni") elif MODE == "intestazioni-csv": for header in headers: preview = re.sub(r"[^a-z0-9]+", "_", header.lower()).strip("_") print(f"{header!r} -> {preview!r}") elif MODE == "valori-numerici-csv": for header in headers: values = [] for row in rows: try: values.append(float((row.get(header) or "").replace(",", "."))) except ValueError: pass if values: print(f"{header}: n={len(values)} min={min(values)} max={max(values)} media={sum(values)/len(values):.2f}") elif MODE == "date-csv": pattern = re.compile(r"^\d{4}-\d{2}-\d{2}$") for header in headers: values = [(row.get(header) or "").strip() for row in rows] valid = sum(bool(pattern.match(value)) for value in values if value) if valid: print(f"{header}: date ISO valide={valid}; altri valori={len([v for v in values if v])-valid}") elif MODE == "categorie-csv": for header in headers: counts = Counter((row.get(header) or "").strip() for row in rows) if 1 < len(counts) <= 30: print(f"{header}: {counts.most_common(10)}") else: for header in headers: lengths = [len((row.get(header) or "").strip()) for row in rows] if lengths: print(f"{header}: min={min(lengths)} max={max(lengths)} media={sum(lengths)/len(lengths):.1f}") def print_json_report(file_path): data = json.loads(file_path.read_text(encoding="utf-8")) items = data if isinstance(data, list) else [data] print(f"Contesto: {CONTEXT}; elementi: {len(items)}") if MODE == "campi-json": for index, item in enumerate(items): missing = [field for field in REQUIRED_FIELDS if not isinstance(item, dict) or item.get(field) in (None, "")] if missing: print(f"elemento {index}: mancanti {', '.join(missing)}") elif MODE == "id-json": values = [item.get(REQUIRED_FIELDS[0]) for item in items if isinstance(item, dict)] for value, count in Counter(values).items(): if value in (None, "") or count > 1: print(f"id={value!r}: occorrenze={count}") else: types = {} for item in items: if isinstance(item, dict): for key, value in item.items(): types.setdefault(key, Counter())[type(value).__name__] += 1 for key in sorted(types): print(f"{key}: {dict(types[key])}") def print_text_report(file_path): text = file_path.read_text(encoding="utf-8", errors="replace") if MODE == "struttura-markdown": for line_number, line in enumerate(text.splitlines(), 1): if re.match(r"^#{1,6}\s", line): print(f"{line_number}: {line}") elif MODE == "link-markdown": for target in re.findall(r"(?<!!)\[[^]]*\]\(([^)]+)\)", text): print(f"link: {target}") elif MODE == "errori-log": levels = Counter(match.upper() for match in re.findall(r"\b(DEBUG|INFO|WARN|ERROR|CRITICAL)\b", text, re.I)) print(dict(levels)) else: urls = [line.strip() for line in text.splitlines() if line.strip()] for value, count in Counter(urls).items(): parsed = urlparse(value) status = "valido" if parsed.scheme in {"http", "https"} and parsed.netloc else "da verificare" print(f"{value}: {status}; occorrenze={count}") if MODE == "inventario-cartella": files = [item for item in path.rglob("*") if item.is_file()] by_suffix = Counter(item.suffix.lower() or "[senza estensione]" for item in files) print(f"Contesto: {CONTEXT}; file: {len(files)}; byte: {sum(item.stat().st_size for item in files)}") for suffix, count in by_suffix.most_common(): print(f"{suffix}: {count}") elif MODE == "hash-file": files = [path] if path.is_file() else [item for item in path.rglob("*") if item.is_file()] for item in sorted(files): digest = hashlib.sha256(item.read_bytes()).hexdigest() print(f"{digest} {item}") elif MODE.endswith("-json") or MODE in {"campi-json", "id-json", "tipi-json"}: print_json_report(path) elif MODE in {"struttura-markdown", "link-markdown", "errori-log", "url-testo"}: print_text_report(path) else: print_csv_report(path) print("Analisi completata in sola lettura: verificare i risultati sulla fonte prima di correggere i dati.")

Usa

Incolla il contenuto nello strumento AI scelto. Aggiungi gli allegati richiesti e verifica la risposta con la checklist della scheda.

La copia non avvia il modello e non invia dati.

Esempio

Un esempio documentato non è ancora disponibile per questa risorsa.

Risultato atteso

Un resoconto in sola lettura per l’amministrazione, con anomalie e limiti visibili e nessuna modifica automatica.

Cosa controllare

  • Confronta il risultato con i dati di partenza.
  • Verifica fatti, nomi, numeri e passaggi prima dell’uso.
  • Non considerare la risposta dell’AI come una verifica indipendente.

Stato del test

PubblicatoWeb: da classificare

Pubblicato nel catalogo. Non è disponibile un rapporto di prova collegato a questa versione: modello, input, output e limiti devono ancora essere documentati.

Ultimo controllo documentato: non disponibile.

Data di test dichiarata nella scheda precedente: 9 set 2026 — sintassi e prove automatiche locali. Da sola non costituisce una verifica.

Cosa significano i badge
Pubblicato
Disponibile nel catalogo; non attesta una prova.
Testato
Prova documentata sulla stessa versione, con modello, dati e limiti.
Verificato
Risultato della prova controllato anche da un revisore identificato.
Da aggiornare
Una modifica, una scadenza o un problema richiedono un nuovo controllo.

0 variabili · risparmio indicativo dichiarato: 35 min / controllo.

04

Continua con risorse collegate

Collegamenti scelti per categoria, strumenti e obiettivo. Apri soltanto ciò che serve al tuo prossimo passaggio.

PromptAmministrazione

Matrice delle priorità per l’amministrazione

Metodo per ordinare il lavoro con criteri dichiarati e dipendenze visibili nel settore amministrazione, con fonti, limiti e verifica finale.

ChatGPT + Claude + Gemini · IntermedioApri la risorsa
AutomazioneAmministrazione

Report mensile per l’amministrazione

Flusso controllato per produrre una bozza tracciabile con fonti e periodo nel settore amministrazione, con approvazione umana degli effetti esterni.

Make + n8n + Fogli di calcolo · IntermedioApri la risorsa
ScriptAmministrazione

Indice dei Markdown per l’amministrazione

Script Python in sola lettura per estrarre la gerarchia dei titoli senza modificare i file nel settore amministrazione, con verifica sulla fonte.

Python 3.10+ · BaseApri la risorsa
ScriptAmministrazione

Audit dei duplicati CSV per l’amministrazione

Script Python in sola lettura per contare valori ripetuti nella colonna chiave nel settore amministrazione, con verifica sulla fonte.

Python 3.10+ · IntermedioApri la risorsa
ScriptAmministrazione

Audit dei campi vuoti CSV per l’amministrazione

Script Python in sola lettura per segnalare righe con campi obbligatori vuoti nel settore amministrazione, con verifica sulla fonte.

Python 3.10+ · AvanzatoApri la risorsa
ScriptAmministrazione

Audit delle righe CSV per l’amministrazione

Script Python in sola lettura per individuare righe con un numero anomalo di celle nel settore amministrazione, con verifica sulla fonte.

Python 3.10+ · BaseApri la risorsa