Spaces:
Sleeping
Sleeping
| # tools/file_parser.py | |
| import pandas as pd | |
| import os | |
| def parse_file_and_summarize(file_path: str, query: str = "") -> str: | |
| """ | |
| Reads a CSV or Excel file and optionally answers a simple question about it. | |
| Args: | |
| file_path (str): Path to the file (.csv or .xlsx). | |
| query (str): Optional freeform instruction (e.g. "total food sales"). | |
| Returns: | |
| str: Summary or result from the file. | |
| """ | |
| try: | |
| _, ext = os.path.splitext(file_path.lower()) | |
| if ext == ".csv": | |
| df = pd.read_csv(file_path) | |
| elif ext in [".xls", ".xlsx"]: | |
| df = pd.read_excel(file_path) | |
| else: | |
| return "Unsupported file format. Please upload CSV or Excel." | |
| if df.empty: | |
| return "The file is empty or unreadable." | |
| if not query: | |
| return f"Loaded file with {df.shape[0]} rows and {df.shape[1]} columns.\nColumns: {', '.join(df.columns)}" | |
| # Very basic natural language query handling (expand with LLM if needed) | |
| if "total" in query.lower() and "food" in query.lower(): | |
| food_rows = df[df['category'].str.lower() == "food"] | |
| if "sales" in df.columns: | |
| total = food_rows["sales"].sum() | |
| return f"Total food sales: ${total:.2f}" | |
| else: | |
| return "Could not find 'sales' column in the file." | |
| else: | |
| return "Query not supported. Please specify a clearer question." | |
| except Exception as e: | |
| return f"File parsing error: {str(e)}" | |