import gradio as gr import pandas as pd import os import tempfile def estimate_and_convert(file, compression='snappy'): """ Fonction qui estime le gain et convertit le fichier en Parquet. """ if file is None: return "Aucun fichier sélectionné", None try: # Lire le fichier selon l'extension ext = file.name.split('.')[-1].lower() if ext == 'csv': df = pd.read_csv(file.name) elif ext in ['xls', 'xlsx']: df = pd.read_excel(file.name) else: return f"Type de fichier non supporté : {ext}", None # Taille originale size_original = os.path.getsize(file.name) / 1_000_000 # en Mo # Créer un fichier temporaire pour le Parquet with tempfile.NamedTemporaryFile(mode='wb', suffix='.parquet', delete=False) as tmp: parquet_path = tmp.name df.to_parquet(parquet_path, engine='pyarrow', compression=compression) # Taille du fichier Parquet size_parquet = os.path.getsize(parquet_path) / 1_000_000 # en Mo reduction = 100 * (size_original - size_parquet) / size_original message = (f"Taille originale : {size_original:.2f} Mo\n" f"Taille en Parquet ({compression}) : {size_parquet:.2f} Mo\n" f"Réduction : {reduction:.1f}%") return message, parquet_path except Exception as e: return f"Erreur lors de la conversion : {str(e)}", None # Interface Gradio iface = gr.Interface( fn=estimate_and_convert, inputs=[ gr.File(label="Importer un fichier CSV ou Excel"), gr.Dropdown(['snappy', 'gzip', 'brotli', 'zstd'], value='snappy', label="Compression") ], outputs=[ gr.Textbox(label="Estimation du gain", lines=5), gr.File(label="Télécharger le fichier Parquet") ], title="Conversion CSV/Excel → Parquet", description="Importez un fichier CSV ou Excel, la taille estimée après conversion en Parquet sera affichée et vous pourrez le télécharger." ) iface.launch()