Guida completa a Python
Capitolo 16 – Progetti Pratici per esercitarti: Livello INTERMEDIO
Progetto | Cosa impari |
---|---|
🧾 App Note personali (file) | lettura/scrittura, gestione file |
📂 Organizer automatico cartelle | os , shutil , automazione |
📊 Analizzatore CSV | pandas , visualizzazione dati |
📧 Invio Email programmato | smtplib , schedule , automazione |
📅 Calendario eventi CLI | datetime , file, ricerca |
1. App Note personali (file)
Salva e visualizza appunti in un file .txt
.
def mostra_menu():
print("\n📝 MENU NOTE")
print("1. Aggiungi nota")
print("2. Visualizza note")
print("3. Esci")
def aggiungi_nota():
nota = input("Scrivi la tua nota: ")
with open("note.txt", "a", encoding="utf-8") as f:
f.write(nota + "\n")
print("✅ Nota salvata!")
def mostra_note():
try:
with open("note.txt", "r", encoding="utf-8") as f:
note = f.readlines()
if note:
print("\n📄 Le tue note:")
for i, n in enumerate(note, 1):
print(f"{i}. {n.strip()}")
else:
print("🕳️ Nessuna nota salvata.")
except FileNotFoundError:
print("❌ Nessuna nota trovata.")
while True:
mostra_menu()
scelta = input("Scegli un'opzione: ")
if scelta == "1":
aggiungi_nota()
elif scelta == "2":
mostra_note()
elif scelta == "3":
print("👋 Fine programma.")
break
else:
print("❌ Scelta non valida")
2. Organizer automatico di cartelle
Sposta i file in sottocartelle in base all’estensione.
import os
import shutil
cartella = "cartella_da_organizzare"
# Estensioni e cartelle target
tipi_file = {
".jpg": "Immagini",
".png": "Immagini",
".pdf": "Documenti",
".txt": "Testi",
".mp3": "Audio"
}
os.makedirs(cartella, exist_ok=True)
for file in os.listdir(cartella):
percorso = os.path.join(cartella, file)
if os.path.isfile(percorso):
estensione = os.path.splitext(file)[1]
cartella_dest = tipi_file.get(estensione, "Altro")
dest_path = os.path.join(cartella, cartella_dest)
os.makedirs(dest_path, exist_ok=True)
shutil.move(percorso, os.path.join(dest_path, file))
print(f"📁 Spostato: {file} ➝ {cartella_dest}")
3. Analizzatore CSV con Pandas
import pandas as pd
file = input("📄 Inserisci nome file CSV (es. dati.csv): ")
try:
df = pd.read_csv(file)
print("\n📋 Prime righe del file:")
print(df.head())
print("\n📊 Statistiche:")
print(df.describe())
colonna = input("\n🔎 Colonna da analizzare (media): ")
if colonna in df.columns:
print(f"📈 Media di '{colonna}': {df[colonna].mean()}")
else:
print("❌ Colonna non trovata.")
except FileNotFoundError:
print("❌ File non trovato.")
except Exception as e:
print("⚠️ Errore:", e)
4. Invio email programmato
import smtplib
import schedule
import time
from email.message import EmailMessage
def invia_email():
email = EmailMessage()
email['Subject'] = "📬 Email automatica"
email['From'] = "tuo@email.com"
email['To'] = "destinatario@email.com"
email.set_content("Ciao! Questa è un'email inviata in automatico da Python.")
with smtplib.SMTP_SSL("smtp.gmail.com", 465) as smtp:
smtp.login("tuo@email.com", "password_app")
smtp.send_message(email)
print("✅ Email inviata!")
# Ogni 1 minuto per test
schedule.every(1).minutes.do(invia_email)
while True:
schedule.run_pending()
time.sleep(1)
⚠️ Per Gmail serve creare una password per app nelle impostazioni di sicurezza.
5. Calendario eventi CLI
import datetime
eventi = []
def aggiungi_evento():
nome = input("🗓️ Nome evento: ")
data_str = input("📅 Data (formato YYYY-MM-DD): ")
try:
data = datetime.datetime.strptime(data_str, "%Y-%m-%d").date()
eventi.append((nome, data))
print("✅ Evento aggiunto.")
except ValueError:
print("❌ Data non valida.")
def mostra_eventi():
oggi = datetime.date.today()
eventi_ordinati = sorted(eventi, key=lambda e: e[1])
print("\n📌 Eventi futuri:")
for nome, data in eventi_ordinati:
giorni_mancanti = (data - oggi).days
if giorni_mancanti >= 0:
print(f"{data} - {nome} (tra {giorni_mancanti} giorni)")
while True:
print("\n📅 MENU")
print("1. Aggiungi evento")
print("2. Mostra eventi")
print("3. Esci")
scelta = input("Scelta: ")
if scelta == "1":
aggiungi_evento()
elif scelta == "2":
mostra_eventi()
elif scelta == "3":
break
else:
print("❌ Scelta non valida.")