Skip to content

Commit 2d068e9

Browse files
committedApr 10, 2025·
V 3.1.0 Beta
- Add organizzazione in ordine alfabetico degli script - Add breve descrizione degli script nella lista di selezione - Update "Readme.md" con info sulla V 3.0
1 parent 546bdb2 commit 2d068e9

13 files changed

+130
-69
lines changed
 

‎README.md

+40
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,46 @@ pip install -r requirements.txt
3131

3232
![Update requirements.txt](https://github.com/Magnetarman/Python-Script/actions/workflows/update-reqs.yml/badge.svg)
3333

34+
## **Versione 3.0**
35+
36+
Nuovo approccio all'esecuzione: non si esegue più uno script isolato, ma tramite un unico punto d’ingresso interattivo.
37+
38+
---
39+
40+
### Novità della Versione 3.0
41+
42+
- **Punto d’ingresso unificato:**
43+
È stato introdotto il file `main.py`, il quale gestisce in modo automatico:
44+
45+
- L'installazione automatica delle dipendenze necessarie, lette dal file `requirements.txt`.
46+
- La presentazione di un menu interattivo in terminale che permette di scegliere quale script eseguire.
47+
- Organizzazione degli script automaticamente in ordine alfabetico per maggiore praticità.
48+
- Inserimento affianco dello script di una brevissima descrizione per aumentare facilmente la comprensione.
49+
50+
- **Riorganizzazione della repository:**
51+
La nuova struttura semplifica l'organizzazione e l'esecuzione degli script, rendendo più chiara la gestione degli strumenti messi a disposizione.
52+
53+
---
54+
55+
### Requisiti 📦
56+
57+
- **Python 3.x** (consigliata la versione 3.10 o superiore)
58+
- **Pip** per l'installazione delle dipendenze
59+
60+
---
61+
62+
### Installazione ed Esecuzione 🔧
63+
64+
1. **Clonare la repository e passare al ramo di sviluppo 3.0:**
65+
66+
```bash
67+
git clone https://github.com/Magnetarman/Python-Script.git
68+
cd Python-Script
69+
git checkout v-3.0
70+
```
71+
72+
---
73+
3474
## Licenza 📜
3575

3676
Tutto il progetto è concesso sotto licenza **MIT**. Sentiti libero di utilizzarlo, modificarlo e condividerlo!

‎main.py

+79-69
Original file line numberDiff line numberDiff line change
@@ -1,84 +1,94 @@
1+
#!/usr/bin/env python3
12
import os
2-
import subprocess
33
import sys
4+
import subprocess
45

5-
def check_python_installed():
6-
"""Verifica se Python è installato."""
7-
try:
8-
subprocess.run(['python', '--version'], check=True, stdout=subprocess.DEVNULL)
9-
return True
10-
except FileNotFoundError:
11-
print("Python non è installato. Installalo prima di procedere.")
12-
return False
13-
14-
def check_python_version(min_version):
15-
"""Verifica se la versione di Python è compatibile."""
16-
current_version = sys.version_info
17-
min_required = tuple(map(int, min_version.split('.')))
18-
19-
if current_version >= min_required:
20-
return True
21-
else:
22-
print(f"Richiesta versione Python {min_version} o superiore. Versione attuale: {sys.version}")
23-
return False
24-
25-
def sync_libraries():
26-
"""Sincronizza le librerie con requirements.txt."""
27-
requirements_file = 'requirements.txt'
28-
if os.path.exists(requirements_file):
29-
try:
30-
subprocess.run(['pip', 'install', '-r', requirements_file], check=True)
31-
print("Librerie sincronizzate con successo.")
32-
except subprocess.CalledProcessError as e:
33-
print(f"Errore durante l'installazione delle librerie: {e}")
34-
else:
35-
print("File requirements.txt non trovato.")
6+
def get_scripts(directory):
7+
"""
8+
Restituisce una lista di file .py presenti in 'directory',
9+
escludendo questo script principale (main.py).
10+
La lista viene ordinata alfabeticamente.
11+
"""
12+
scripts = []
13+
for file in os.listdir(directory):
14+
if file.endswith('.py') and file != 'main.py':
15+
scripts.append(file)
16+
return sorted(scripts)
3617

37-
def list_scripts(directory):
38-
"""Elenca tutti gli script Python nella directory specificata."""
39-
return [f for f in os.listdir(directory) if f.endswith('.py') and f != 'main.py']
18+
def get_description(filepath):
19+
"""
20+
Estrae una breve descrizione dallo script in 'filepath'.
21+
La funzione cerca il primo commento (linea che inizia con "#") o docstring che non sia uno shebang.
22+
Se non viene trovata una descrizione, restituisce un messaggio generico.
23+
"""
24+
try:
25+
with open(filepath, 'r', encoding='utf-8') as f:
26+
for line in f:
27+
line = line.strip()
28+
# Ignora shebang e linee vuote
29+
if line.startswith("#!") or not line:
30+
continue
31+
# Se è un commento, lo considera descrizione
32+
if line.startswith("#"):
33+
return line.lstrip("#").strip()
34+
# Se è l'inizio di una docstring in formato triple quotes
35+
if line.startswith('"""') or line.startswith("'''"):
36+
# Rimuove i delimitatori se presenti sulla stessa linea
37+
desc = line.strip('"""').strip("'''").strip()
38+
if desc: # Se contiene del testo, lo restituisce
39+
return desc
40+
# Altrimenti, continua a leggere le righe successive fino a chiudere la docstring
41+
description_lines = []
42+
for next_line in f:
43+
next_line = next_line.strip()
44+
if next_line.endswith('"""') or next_line.endswith("'''"):
45+
description_lines.append(next_line.rstrip('"""').rstrip("'''").strip())
46+
break
47+
description_lines.append(next_line)
48+
return " ".join(description_lines).strip()
49+
return "Nessuna descrizione disponibile."
50+
except Exception:
51+
return "Nessuna descrizione disponibile."
4052

4153
def main():
42-
# Controlla la versione di Python richiesta (modifica '3.8' se necessario)
43-
if not check_python_version('3.8'):
44-
sys.exit(1)
45-
46-
# Controlla se Python è installato
47-
if not check_python_installed():
48-
sys.exit(1)
49-
50-
# Sincronizza le librerie con requirements.txt
51-
sync_libraries()
54+
# Se esiste una cartella "scripts", usiamola, altrimenti la directory corrente
55+
base_dir = os.getcwd()
56+
scripts_dir = os.path.join(base_dir, "scripts")
57+
if os.path.isdir(scripts_dir):
58+
directory = scripts_dir
59+
else:
60+
directory = base_dir
5261

53-
# Specifica la directory contenente gli script
54-
scripts_dir = './scripts' # Cambia il percorso se necessario
62+
scripts = get_scripts(directory)
63+
if not scripts:
64+
print("Nessuno script disponibile da eseguire.")
65+
return
5566

56-
while True: # Ciclo per mantenere il wrapper attivo finché l'utente non digita 'exit'
57-
# Elenca gli script disponibili
58-
scripts = list_scripts(scripts_dir)
59-
if not scripts:
60-
print("Nessuno script trovato nella directory.")
61-
break
67+
# Stampa il menu di selezione in ordine alfabetico
68+
print("Seleziona lo script da eseguire:\n")
69+
for idx, script in enumerate(scripts, start=1):
70+
desc = get_description(os.path.join(directory, script))
71+
print(f"{idx}. {script} - {desc}")
6272

63-
print("\nSeleziona uno script da eseguire (digita 'exit' per uscire):")
64-
for i, script in enumerate(scripts, start=1):
65-
print(f"{i}. {script}")
73+
print("\n0. Esci")
6674

67-
user_input = input("\nInserisci il numero dello script o 'exit': ").strip()
75+
try:
76+
choice = int(input("\nInserisci il numero corrispondente alla tua scelta: "))
77+
except ValueError:
78+
print("Scelta non valida. Inserire un numero.")
79+
return
6880

69-
if user_input.lower() == 'exit':
70-
print("Uscita dal wrapper...")
71-
sys.exit(0) # Termina il programma e chiude il terminale
81+
if choice == 0:
82+
print("Uscita.")
83+
return
7284

73-
try:
74-
choice = int(user_input)
75-
if 1 <= choice <= len(scripts):
76-
selected_script = scripts[choice - 1]
77-
subprocess.run(['python', os.path.join(scripts_dir, selected_script)])
78-
else:
79-
print("Scelta non valida.")
80-
except ValueError:
81-
print("Inserisci un numero valido o 'exit'.")
85+
if 1 <= choice <= len(scripts):
86+
selected_script = os.path.join(directory, scripts[choice - 1])
87+
print(f"Esecuzione di {scripts[choice - 1]}...\n")
88+
# Avvia lo script selezionato usando l'interprete Python
89+
subprocess.run([sys.executable, selected_script])
90+
else:
91+
print("Scelta non valida.")
8292

8393
if __name__ == '__main__':
8494
main()

‎scripts/audio_extract.py

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
# Estrazione tracce audio .flac da file .mkv (anche ricorsiva).
12
import os
23
import subprocess
34

‎scripts/color_palette.py

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
# Estrazione e salvataggio dei colori in formato PDF dominanti da un'immagine.
12
import sys
23
from PIL import Image
34
from sklearn.cluster import KMeans

‎scripts/efolder.py

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
# Individuazione e rimozione sicura di cartelle vuote in una directory.
12
import os
23

34
def find_empty_directories(folder_path):

‎scripts/elenco_cartelle.py

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
# Elenco cartelle di primo livello e salvataggio su file di testo.
12
import os
23

34
def list_folders_in_path():

‎scripts/eml_converter.py

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
# Conversione di email .eml in PDF con dettagli del messaggio.
12
import os
23
import sys
34
import pdfkit

‎scripts/estensioni.py

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
# Analisi e elenco ordinato delle estensioni file in una directory.
12
import os
23

34
def get_file_extensions(folder_path):

‎scripts/image_downloader.py

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
# Download immagini da una pagina web, inclusi contenuti Base64.
12
import os
23
import requests
34
import base64

‎scripts/remove.py

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
# Rimozione file non musicali e pulizia cartelle vuote in una directory.
12
import os
23
import re
34

‎scripts/sposta_file.py

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
# Spostamento file in directory principale e rimozione cartelle vuote.
12
import os
23
import shutil
34

‎scripts/transcribe_wav.py

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
# Conversione audio .wav in testo con Whisper di OpenAI e salvataggio in .txt.
12
import os
23
import whisper
34
from pydub import AudioSegment

‎scripts/trash.py

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
# Spostamento file con nomi specifici in una cartella "duplicati".
12
import os
23
import shutil
34
from tkinter import Tk, filedialog

0 commit comments

Comments
 (0)
Please sign in to comment.