Spaces:
Sleeping
Sleeping
| 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() |