07 Sezione 7 di 15
Libreria: testo, numeri, date, file e formati
Leo ha centinaia di funzioni pronte, sempre disponibili senza importare nulla. Qui trovi le più utili per lavorare con testi, numeri, date, file e cartelle, e per leggere e scrivere i formati di dati più comuni.
Come si usano#
Le funzioni della libreria si chiamano per nome, con gli argomenti tra parentesi: lunghezza("ciao"). I metodi si chiamano con il punto sul valore: "ciao".maiuscolo(). Molti argomenti sono facoltativi e si possono dare per nome: arrotonda(3.14159, cifre = 2). Tutti gli errori sono in italiano, con un suggerimento.
Testi#
| Metodo | Che cosa fa |
|---|---|
t.maiuscolo(), t.minuscolo() | tutto maiuscolo / minuscolo |
t.pulisci() | toglie gli spazi all'inizio e alla fine |
t.dividi([separatore]) | lista dei pezzi (senza separatore divide sugli spazi) |
sep.unisci(lista) | unisce una lista di testi mettendo sep in mezzo |
t.sostituisci(vecchio, nuovo) | sostituisce tutte le volte |
t.contiene(pezzo), t.inizia_con(p), t.finisce_con(p) | controlli sul testo |
variabile riga = "Rossi;Mario;Roma"variabile parti = riga.dividi(";")stampa(parti[1] + " " + parti[0])stampa(" - ".unisci(parti).maiuscolo())stampa(riga.contiene("Roma"), lunghezza(riga))per ogni lettera in "ciao" fai stampa(lettera.maiuscolo())fineMario Rossi ROSSI - MARIO - ROMA vero 16 C I A O
Per controllare dati italiani ci sono funzioni pronte che restituiscono vero o falso: e_email, e_codice_fiscale (controlla anche il carattere finale), e_partita_iva, e_iban ed e_cap.
stampa(e_email("ada@esempio.it"))stampa(e_cap("00184"), e_cap("184"))stampa(e_iban("IT60X0542811101000000123456"))vero vero falso vero
Per cercare pezzi di testo con una certa forma (tutte le cifre, tutte le email…) ci sono i modelli di testo: li trovi in Programmazione avanzata.
Numeri e statistica#
| Funzione | Che cosa fa |
|---|---|
arrotonda(x, [cifre]) | arrotonda (le metà lontano da zero) |
arrotonda_per_difetto, arrotonda_per_eccesso | verso il basso / verso l'alto |
assoluto(x), radice(x) | valore assoluto, radice quadrata |
minimo(...), massimo(...), somma(lista) | il più piccolo, il più grande, la somma |
media, mediana, moda, deviazione | statistica di una lista |
casuale(da, a), scegli_a_caso(lista), mescola(lista) | numeri e scelte a caso |
e_primo(n), mcd(a, b), mcm(a, b), fattorizza(n) | aritmetica |
in_romano(n), in_binario(n), in_esadecimale(n) | altre scritture dei numeri |
variabile voti = [6, 7, 7, 8, 9, 5]stampa("Media:", arrotonda(media(voti), 2))stampa("Mediana:", mediana(voti), "Moda:", moda(voti))stampa(e_primo(97), mcd(12, 18), fattorizza(360))stampa(in_romano(2026), in_binario(10))stampa(media(1..1000000))Media: 7.0 Mediana: 7 Moda: 7 vero 6 [2, 2, 2, 3, 3, 5] MMXXVI 1010 500000.5
Soldi, precisi al centesimo#
Con i numeri decimali del computer 0.1 + 0.2 non fa esattamente 0.3. Per i conti con gli euro usa soldi: è preciso al centesimo, arrotonda come i commercianti e si scrive all'italiana.
stampa(soldi("19,99").per(3))stampa(soldi(100).ripartisci(3))stampa(soldi(100).con_iva())stampa(soldi(122).scorpora_iva())stampa(frazione(1, 2).piu(frazione(1, 3)))59,97 € [33,34 €, 33,33 €, 33,33 €] 122,00 € 100,00 € 5/6
Date e orari#
Il tipo data si scrive all'italiana, 25/09/2026. Si crea con data(anno, mese, giorno), da un testo con data("25/09/2026 14:30"), e adesso() dà il momento attuale.
variabile esame = data(2026, 6, 18)variabile inizio_corso = data("15/09/2025")stampa(esame, esame.nome_giorno)stampa("Giorni tra le due date:", giorni_tra(inizio_corso, esame))stampa(esame.aggiungi_giorni(10))stampa(formatta_data(esame))stampa(esame.formato("GG/MM/AAAA"))18/06/2026 giovedì Giorni tra le due date: 276 28/06/2026 giovedì 18 giugno 2026 18/06/2026
Ci sono anche le festività italiane (compresa Pasqua, calcolata), i giorni lavorativi e l'età:
stampa(pasqua(2026))stampa(nome_festivita(data(2026, 12, 25)))stampa(e_giorno_lavorativo(data(2026, 6, 2)))stampa(giorni_lavorativi(data(2026, 12, 1), data(2026, 12, 31)))stampa(calcola_eta(data(2000, 3, 15), alla_data = data(2026, 9, 27)))stampa(durata_in_parole(3725))05/04/2026 Natale falso 21 26 1 ora, 2 minuti e 5 secondi
Per l'ora come testo ci sono ora() ("HH:MM:SS") e oggi() ("GG/MM/AAAA"); attendi(secondi) aspetta; cronometro() misura il tempo.
Leggere e scrivere file#
| Funzione | Che cosa fa |
|---|---|
leggi_file(percorso) | tutto il testo di un file |
scrivi_file(percorso, testo) | scrive il testo, sostituendo il contenuto |
aggiungi_a_file(percorso, testo) | aggiunge in fondo (crea il file se manca) |
leggi_righe(percorso), scrivi_righe(percorso, righe) | una lista di righe |
esiste(percorso), e_file(p), e_cartella(p) | controlli |
scrivi_righe("spesa.txt", ["pane", "latte", "uova"])aggiungi_a_file("spesa.txt", "caffè")per ogni cosa in leggi_righe("spesa.txt") fai stampa("- " + cosa)finestampa(esiste("spesa.txt"), dimensione_leggibile(dimensione_file("spesa.txt")))- pane - latte - uova - caffè vero 23 byte
- I percorsi relativi (
"dati/voti.csv") partono dalla cartella corrente. Le cartelle si separano con/, anche su Windows. - I file si scrivono in UTF-8; in lettura Leo riconosce da solo anche i file del Blocco note in «Unicode» e i vecchi file di Excel.
cartella_programma()è la cartella del programma che stai eseguendo: comoda per i file che stanno accanto al programma.
Cartelle, percorsi e cestino#
se non esiste("backup") allora crea_cartella("backup")finecopia_file("voti.csv", "backup") # backup/voti.csvrinomina_file("backup/voti.csv", "voti_2026.csv")stampa(elenca_file("backup"))stampa(nome_file("foto/estate/mare.jpg"), estensione_file("mare.JPG"))stampa(unisci_percorso("dati", "2026", "voti.csv"))["voti_2026.csv"] mare.jpg jpg dati/2026/voti.csv
| Funzione | Che cosa fa |
|---|---|
crea_cartella(p) | crea la cartella (e quelle intermedie) |
elenca_file(cartella, filtro), elenca_cartelle(cartella) | nomi dei file / delle sottocartelle; filtri come "*.jpg;*.png" |
cerca_file(cartella, filtro) | cerca anche nelle sottocartelle |
copia_file, sposta_file, rinomina_file, copia_cartella | copiare, spostare, rinominare |
elimina_file, elimina_cartella, svuota_cartella | eliminare, nel cestino |
cartella_documenti(), cartella_desktop(), cartella_download() | le cartelle speciali dell'utente |
file_temporaneo(), cartella_temporanea() | file e cartelle che si eliminano da soli alla fine |
prova elimina_cartella(cartella_casa())cattura ErroreFile come e stampa("Leo si è rifiutato:", e.messaggio)fineLeo si è rifiutato: Non posso eliminare `/root`: è la tua cartella personale.
Tabelle CSV (anche per Excel)#
Un file CSV è una tabella scritta come testo, una riga per riga: lo aprono Excel e LibreOffice. Con leggi_tabella ogni riga diventa un dizionario, con i nomi delle colonne come chiavi; il separatore (,, ; o tabulazione) si indovina da solo e i numeri diventano numeri.
variabile classe = [{"nome": "Ada", "voto": 9.5}, {"nome": "Bruno", "voto": 7}]scrivi_tabella("voti.csv", classe, excel = vero)aggiungi_a_tabella("voti.csv", {"nome": "Carla", "voto": 8})per ogni r in leggi_tabella("voti.csv") fai stampa(r["nome"], r["voto"])finestampa(leggi_file("voti.csv"))Ada 9.5 Bruno 7 Carla 8 nome;voto Ada;9,5 Bruno;7 Carla;8
Con excel = vero il file è pronto per l'Excel italiano: separatore ;, decimali con la virgola e lettere accentate che si vedono giuste.
JSON, INI e TOML#
JSON è il formato più usato per salvare dati strutturati e scambiarli con i siti web. Liste e dizionari di Leo si salvano e si rileggono così come sono:
variabile punti = leggi_json("punti.json", predefinito = {})punti["Ada"] = 120punti["Bruno"] = 95scrivi_json("punti.json", punti)stampa(leggi_json("punti.json"))stampa(a_json({"ok": vero, "valori": [1, 2]})){"Ada": 120, "Bruno": 95}
{"ok": true, "valori": [1, 2]}I file di impostazioni si leggono e scrivono con leggi_ini / scrivi_ini (sezioni e chiavi) e leggi_toml / scrivi_toml. Leo li scrive in modo sicuro: un'interruzione non lascia mai un file a metà.
scrivi_ini("gioco.ini", {"grafica": {"larghezza": 800, "schermo_intero": falso}})variabile config = leggi_ini("gioco.ini")stampa(config["grafica"]["larghezza"] + 100)900
Archivi ZIP#
scrivi_file("nota.txt", "da conservare")crea_cartella("foto")scrivi_file("foto/leggimi.txt", "qui vanno le foto")comprimi_zip(["nota.txt", "foto"], "backup.zip")stampa(elenca_zip("backup.zip"))variabile estratti = estrai_zip("backup.zip", "ripristino")stampa(lunghezza(estratti), "file ripristinati")["nota.txt", "foto/leggimi.txt"] 2 file ripristinati
estrai_zip controlla tutto prima di scrivere: non sovrascrive file esistenti (serve sovrascrivi = vero) e rifiuta gli archivi pericolosi, con percorsi che uscirebbero dalla cartella o che occuperebbero una quantità esagerata di spazio.
Lavorare su intere liste#
Queste funzioni ricevono una lista e spesso una funzione da applicare a ogni elemento: una tua, una della libreria o una scritta al volo.
variabile parole = ["leone", "ape", "gatto", "orso"]stampa(mappa(parole, lunghezza))stampa(filtra(parole, funzione (p) restituisci lunghezza(p) > 3 fine))stampa(ordina_per(parole, lunghezza))stampa(conta_se([4, 7, 9, 5], funzione (v) restituisci v >= 6 fine))stampa(enumera(["a", "b"], 1))[5, 3, 5, 4] ["leone", "gatto", "orso"] ["ape", "orso", "leone", "gatto"] 2 [[1, "a"], [2, "b"]]
Altre: riduci, raggruppa_per, tutti, almeno_uno, accoppia. Nessuna di queste funzioni cambia la lista che riceve: ne restituiscono sempre una nuova.