Download app.py from aiqtech/CSV: direct link, hf CLI and curl.
- Browser
- Download file 4.66 kB
-
https://huggingface.co/spaces/aiqtech/CSV/resolve/main/app.py
- Command line
-
hf download hf://spaces/aiqtech/CSV/app.py
-
curl -L -o app.py https://huggingface.co/spaces/aiqtech/CSV/resolve/main/app.py
4.66 kB
| import gradio as gr | |
| import pandas as pd | |
| import os | |
| import tempfile | |
| import chardet | |
| def detect_encoding(file_path): | |
| """ | |
| Function to detect file encoding | |
| """ | |
| with open(file_path, 'rb') as f: | |
| result = chardet.detect(f.read()) | |
| return result['encoding'] | |
| def merge_csv_files(files): | |
| """ | |
| Function to merge multiple CSV files into one | |
| Args: | |
| files: List of uploaded CSV files | |
| Returns: | |
| Path to the merged CSV file and status message | |
| """ | |
| if not files or len(files) == 0: | |
| return None, "No files were uploaded. Please select CSV files to merge." | |
| if len(files) > 30: | |
| return None, "Maximum 30 files can be merged at once." | |
| try: | |
| # Read all files into DataFrame list | |
| dataframes = [] | |
| for file in files: | |
| # Detect file encoding | |
| encoding = detect_encoding(file.name) | |
| try: | |
| df = pd.read_csv(file.name, encoding=encoding) | |
| except UnicodeDecodeError: | |
| # Try other encodings if detected encoding fails | |
| encodings_to_try = ['cp949', 'euc-kr', 'latin1', 'ISO-8859-1'] | |
| for enc in encodings_to_try: | |
| try: | |
| df = pd.read_csv(file.name, encoding=enc) | |
| break | |
| except UnicodeDecodeError: | |
| continue | |
| else: | |
| return None, f"Could not determine encoding for '{os.path.basename(file.name)}'." | |
| dataframes.append(df) | |
| # Merge all DataFrames | |
| if dataframes: | |
| merged_df = pd.concat(dataframes, ignore_index=True) | |
| # Save to temporary file | |
| with tempfile.NamedTemporaryFile(delete=False, suffix='.csv') as tmp: | |
| output_path = tmp.name | |
| # Save merged data in Excel-compatible format (UTF-8 with BOM) | |
| merged_df.to_csv(output_path, index=False, encoding='utf-8-sig') | |
| return output_path, f"Successfully merged {len(files)} files. Please open with UTF-8 encoding in Excel." | |
| else: | |
| return None, "No data to merge." | |
| except Exception as e: | |
| return None, f"Error occurred: {str(e)}" | |
| # Create a stylish Gradio interface | |
| with gr.Blocks(title="CSVFusion") as app: | |
| gr.Markdown( | |
| """ | |
| # 📊 CSVFusion: Intelligent File Merger | |
| *Seamlessly combine multiple CSV files into one unified dataset* | |
| --- | |
| """ | |
| ) | |
| with gr.Row(): | |
| with gr.Column(scale=2): | |
| gr.Markdown(""" | |
| ### How to use CSVFusion: | |
| 1. Upload up to 30 CSV files using the panel on the right | |
| 2. Click the "Merge Files" button | |
| 3. Download your consolidated CSV file | |
| ### Features: | |
| - Automatic encoding detection | |
| - Handles various CSV formats | |
| - Excel-compatible output (UTF-8) | |
| - Preserves all data columns | |
| """) | |
| with gr.Column(scale=3): | |
| input_files = gr.File( | |
| file_count="multiple", | |
| label="Upload CSV Files (Max 30)", | |
| file_types=[".csv"], | |
| elem_id="file_upload" | |
| ) | |
| with gr.Row(): | |
| merge_button = gr.Button("Merge Files", variant="primary", size="lg") | |
| with gr.Row(): | |
| with gr.Column(): | |
| status = gr.Textbox(label="Status", placeholder="Ready to merge your files...") | |
| with gr.Column(): | |
| output_file = gr.File(label="Download Merged CSV") | |
| # Add custom CSS for better visual appeal | |
| gr.HTML(""" | |
| <style> | |
| .gradio-container { | |
| background: linear-gradient(to right, #f9f9f9, #ffffff); | |
| border-radius: 12px; | |
| } | |
| #file_upload { | |
| border: 2px dashed #3498db; | |
| border-radius: 8px; | |
| padding: 20px; | |
| transition: all 0.3s; | |
| } | |
| #file_upload:hover { | |
| border-color: #2980b9; | |
| box-shadow: 0 0 10px rgba(52, 152, 219, 0.3); | |
| } | |
| .footer { | |
| text-align: center; | |
| margin-top: 30px; | |
| color: #7f8c8d; | |
| font-size: 0.9em; | |
| } | |
| </style> | |
| """) | |
| # Add footer | |
| gr.HTML(""" | |
| <div class="footer"> | |
| <p>CSVFusion © 2025 - A powerful tool for data professionals</p> | |
| </div> | |
| """) | |
| merge_button.click( | |
| fn=merge_csv_files, | |
| inputs=[input_files], | |
| outputs=[output_file, status] | |
| ) | |
| # Run the app | |
| if __name__ == "__main__": | |
| app.launch() |