Guida completa a Python

Guida completa a Python

Capitolo 16 – Progetti Pratici per esercitarti: Livello INTERMEDIO

ProgettoCosa impari
🧾 App Note personali (file)lettura/scrittura, gestione file
📂 Organizer automatico cartelleos, shutil, automazione
📊 Analizzatore CSVpandas, visualizzazione dati
📧 Invio Email programmatosmtplib, schedule, automazione
📅 Calendario eventi CLIdatetime, 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.")

Pagine: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19