├── unique_card.ipynb ├── remaining_depot.ipynb ├── SNOW.ipynb └── city_depot.ipynb /unique_card.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": null, 6 | "id": "57082401", 7 | "metadata": {}, 8 | "outputs": [], 9 | "source": [ 10 | "import pandas as pd\n", 11 | "import os\n", 12 | "from google.colab import files\n", 13 | "# Step 1: Upload multiple vendor Excel files\n", 14 | "print("�� Upload all vendor Excel files (e.g., Ciena, ADVA, Tejas) with 'Part Number' and 'Unique\n", 15 | "card name'")\n", 16 | "vendor_uploads = files.upload()\n", 17 | "# Build the master dictionary from all vendor files\n", 18 | "master_lookup = {}\n", 19 | " \n", 20 | "for file in vendor_uploads:\n", 21 | "try:\n", 22 | "vendor_df = pd.read_excel(file, sheet_name='NEW live data')\n", 23 | "vendor_df.columns = vendor_df.columns.str.strip()\n", 24 | "vendor_df['Part Number'] = vendor_df['Part Number'].astype(str).str.strip()\n", 25 | "vendor_df['Unique card name'] = vendor_df['Unique card name'].astype(str).str.strip()\n", 26 | " # Update master dictionary\n", 27 | "master_lookup.update(dict(zip(vendor_df['Part Number'], vendor_df['Unique card\n", 28 | "name'])))\n", 29 | "print(f"✅ Loaded: {file}")\n", 30 | "except Exception as e:\n", 31 | "print(f"❌ Failed to load {file}: {e}")\n", 32 | " \n", 33 | "# Step 2: Upload the Faulty Mixed file\n", 34 | "print("\\n�� Upload the Faulty Mixed Excel file (will update based on Part Number)")\n", 35 | "faulty_upload = files.upload()\n", 36 | "faulty_file = list(faulty_upload.keys())[0]\n", 37 | "# Step 3: Load the Faulty Mixed Sheet2 (you can change sheet_name if needed)\n", 38 | "faulty_df = pd.read_excel(faulty_file, sheet_name=1) # Sheet2\n", 39 | "faulty_df.columns = faulty_df.columns.str.strip()\n", 40 | "if 'Part Number' not in faulty_df.columns:\n", 41 | "print("❌ 'Part Number' column not found in Faulty Mixed file.")\n", 42 | "else:\n", 43 | "faulty_df['Part Number'] = faulty_df['Part Number'].astype(str).str.strip()\n", 44 | " # Update Unique card name from master lookup\n", 45 | "faulty_df['Unique card name'] = faulty_df['Part Number'].map(master_lookup)\n", 46 | " \n", 47 | " # Save and download\n", 48 | " output_file = f"updated_{faulty_file}"\n", 49 | " faulty_df.to_excel(output_file, index=False, sheet_name='Sheet2')\n", 50 | " print(f"\\n✅ Done! Updated file: {output_file}")\n", 51 | " files.download(output_file)\n", 52 | "\n", 53 | "\n", 54 | " \n" 55 | ] 56 | } 57 | ], 58 | "metadata": { 59 | "language_info": { 60 | "name": "python" 61 | } 62 | }, 63 | "nbformat": 4, 64 | "nbformat_minor": 5 65 | } 66 | -------------------------------------------------------------------------------- /remaining_depot.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": null, 6 | "id": "aa0075c0", 7 | "metadata": {}, 8 | "outputs": [], 9 | "source": [ 10 | "import pandas as pd\n", 11 | "import os\n", 12 | "import shutil\n", 13 | "from google.colab import files\n", 14 | "\n", 15 | "# Step 1: Upload ISP Master file\n", 16 | "print("�� Upload the ISP Master Excel file (must contain 'City New' and 'Depot' in Sheet2)")\n", 17 | "isp_uploaded = files.upload()\n", 18 | "isp_file = list(isp_uploaded.keys())[0]\n", 19 | "# Read ISP data from Sheet2\n", 20 | "isp_df = pd.read_excel(isp_file, sheet_name=1)\n", 21 | "isp_df['City New'] = isp_df['City New'].astype(str).str.strip()\n", 22 | "isp_df['Depot'] = isp_df['Depot'].astype(str).str.strip()\n", 23 | "city_to_depot = dict(zip(isp_df['City New'], isp_df['Depot']))\n", 24 | " \n", 25 | "# Step 2: Upload updated Excel files\n", 26 | "print("\\n�� Upload all updated Excel files (Depot values will be updated where matches exist)")\n", 27 | "uploaded_files = files.upload()\n", 28 | " \n", 29 | "# Create directories\n", 30 | "input_dir = "input_updated_files"\n", 31 | "output_dir = "filled_output_files"\n", 32 | "os.makedirs(input_dir, exist_ok=True)\n", 33 | "os.makedirs(output_dir, exist_ok=True)\n", 34 | " \n", 35 | "# Move uploaded files to input directory\n", 36 | "for fname in uploaded_files:\n", 37 | "shutil.move(fname, os.path.join(input_dir, fname))\n", 38 | " \n", 39 | "# Step 3: Process each file\n", 40 | "for filename in os.listdir(input_dir):\n", 41 | "if filename.endswith('.xlsx'):\n", 42 | "try:\n", 43 | " file_path = os.path.join(input_dir, filename)\n", 44 | " df = pd.read_excel(file_path)\n", 45 | " df.columns = df.columns.str.strip()\n", 46 | "if 'City from CBOSS' not in df.columns or 'Depot' not in df.columns:\n", 47 | "print(f"⚠️ Skipping {filename}: Missing 'City from CBOSS' or 'Depot' column.")\n", 48 | "continue\n", 49 | "df['City from CBOSS'] = df['City from CBOSS'].astype(str).str.strip()\n", 50 | "df['Depot'] = df['Depot'].astype(str).str.strip()\n", 51 | " # Update Depot only where there's a match\n", 52 | " df['Depot'] = df.apply(\n", 53 | " lambda row: city_to_depot[row['City from CBOSS']]\n", 54 | " if row['City from CBOSS'] in city_to_depot else row['Depot'],\n", 55 | "axis=1 )\n", 56 | "\n", 57 | " # Save and download\n", 58 | " output_file = f"updated_{filename}"\n", 59 | " output_path = os.path.join(output_dir, output_file)\n", 60 | " df.to_excel(output_path, index=False)\n", 61 | " print(f"✅ Processed: {filename}")\n", 62 | " files.download(output_path)\n", 63 | "except Exception as e:\n", 64 | "print(f"❌ Error processing {filename}: {e}")\n", 65 | " print("\\n�� All matching Depot values updated and files downloaded!")\n", 66 | "\n" 67 | ] 68 | } 69 | ], 70 | "metadata": { 71 | "language_info": { 72 | "name": "python" 73 | } 74 | }, 75 | "nbformat": 4, 76 | "nbformat_minor": 5 77 | } 78 | -------------------------------------------------------------------------------- /SNOW.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": null, 6 | "id": "6139f992", 7 | "metadata": {}, 8 | "outputs": [], 9 | "source": [ 10 | "import pandas as pd\n", 11 | "import os\n", 12 | "from google.colab import files\n", 13 | "import shutil\n", 14 | "# === Step 1: Upload SNOW Depot mapping file ===\n", 15 | "print("�� Upload the 'Depot Vs SNOW Depot name.xlsx' file")\n", 16 | "snow_upload = files.upload()\n", 17 | "snow_file = list(snow_upload.keys())[0]\n", 18 | "# Read the mapping file\n", 19 | "snow_df = pd.read_excel(snow_file)\n", 20 | "snow_df.columns = snow_df.columns.str.strip()\n", 21 | "snow_df['Depot'] = snow_df['Depot'].astype(str).str.strip()\n", 22 | "snow_df['SNOW_Depot Name'] = snow_df['SNOW_Depot Name'].astype(str).str.strip()\n", 23 | "# Create lookup dictionary: Depot → SNOW_Depot Name\n", 24 | "depot_to_snow = dict(zip(snow_df['Depot'], snow_df['SNOW_Depot Name']))\n", 25 | "# === Step 2: Upload all updated Excel files ===\n", 26 | "print("\\n�� Upload all Excel files to update with SNOW_Depot Name")\n", 27 | "uploaded_files = files.upload()\n", 28 | "# Setup folders\n", 29 | "input_dir = "input_snow_files"\n", 30 | "output_dir = "output_snow_files"\n", 31 | "os.makedirs(input_dir, exist_ok=True)\n", 32 | "os.makedirs(output_dir, exist_ok=True)\n", 33 | "# Move uploaded files into input directory\n", 34 | "for fname in uploaded_files:\n", 35 | "shutil.move(fname, os.path.join(input_dir, fname))\n", 36 | "\n", 37 | "# === Step 3: Process and update each file ===\n", 38 | "for fname in os.listdir(input_dir):\n", 39 | " if fname.endswith('.xlsx'):\n", 40 | " try:\n", 41 | " file_path = os.path.join(input_dir, fname)\n", 42 | " df = pd.read_excel(file_path, engine='openpyxl')\n", 43 | " df.columns = df.columns.str.strip()\n", 44 | " if 'Depot' not in df.columns:\n", 45 | " print(f"⚠️ Skipping {fname}: 'Depot' column missing.")\n", 46 | " continue\n", 47 | " df['Depot'] = df['Depot'].fillna('').astype(str).str.strip()\n", 48 | " # Add new column: SNOW_Depot Name\n", 49 | " snow_column = df['Depot'].map(depot_to_snow)\n", 50 | " # Insert next to 'Depot' column\n", 51 | " depot_index = df.columns.get_loc('Depot')\n", 52 | " df.insert(depot_index + 1, 'SNOW_Depot Name', snow_column)\n", 53 | " # Save and download updated file\n", 54 | " output_file = f"snow_added_{fname}"\n", 55 | " output_path = os.path.join(output_dir, output_file)\n", 56 | " df.to_excel(output_path, index=False, engine='openpyxl')\n", 57 | " print(f"✅ Processed: {fname}")\n", 58 | " files.download(output_path)\n", 59 | "except Exception as e:\n", 60 | "print(f"❌ Error processing {fname}: {e}")\n", 61 | "print("\\n�� All files updated with 'SNOW_Depot Name' placed next to 'Depot' and\n", 62 | "downloaded!")\n" 63 | ] 64 | } 65 | ], 66 | "metadata": { 67 | "language_info": { 68 | "name": "python" 69 | } 70 | }, 71 | "nbformat": 4, 72 | "nbformat_minor": 5 73 | } 74 | -------------------------------------------------------------------------------- /city_depot.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": null, 6 | "id": "5dddf575", 7 | "metadata": {}, 8 | "outputs": [], 9 | "source": [ 10 | "import pandas as pd\n", 11 | "import os\n", 12 | "from google.colab import files\n", 13 | "import shutil\n", 14 | "\n", 15 | "# === Step 1: Upload CBOSS file ===\n", 16 | "print("�� Upload CBOSS Excel file (with 'Network element' and 'CITY NAME')")\n", 17 | "cboss_uploaded = files.upload()\n", 18 | "cboss_file = list(cboss_uploaded.keys())[0]\n", 19 | " \n", 20 | "cboss_df = pd.read_excel(cboss_file, engine='openpyxl')\n", 21 | "cboss_df.columns = cboss_df.columns.str.strip()\n", 22 | "cboss_df['Network element'] = cboss_df['Network element'].astype(str).str.strip()\n", 23 | "cboss_df['CITY NAME'] = cboss_df['CITY NAME'].astype(str).str.strip()\n", 24 | "cboss_lookup = cboss_df[['Network element', 'CITY NAME']].rename(columns={'CITY NAME':\n", 25 | "'City from CBOSS'})\n", 26 | " \n", 27 | "# === Step 2: Upload Depot master file ===\n", 28 | "print("�� Upload Depot Master Excel file (with 'City from CBOSS' and 'Depot')")\n", 29 | "depot_uploaded = files.upload()\n", 30 | "depot_file = list(depot_uploaded.keys())[0]\n", 31 | " \n", 32 | "depot_df = pd.read_excel(depot_file, engine='openpyxl')\n", 33 | "depot_df.columns = depot_df.columns.str.strip()\n", 34 | "depot_df['City from CBOSS'] = depot_df['City from CBOSS'].astype(str).str.strip()\n", 35 | "depot_df['Depot'] = depot_df['Depot'].astype(str).str.strip()\n", 36 | " \n", 37 | "# === Step 3: Upload multiple target Excel files ===\n", 38 | "print("�� Upload Excel files to update (multi-select allowed)")\n", 39 | "uploaded_files = files.upload()\n", 40 | " \n", 41 | "# === Step 4: Setup directories ===\n", 42 | "input_dir = 'input_files'\n", 43 | "output_dir = 'output_files'\n", 44 | "os.makedirs(input_dir, exist_ok=True)\n", 45 | "os.makedirs(output_dir, exist_ok=True)\n", 46 | " \n", 47 | "# Move uploaded target files into input folder\n", 48 | "for fname in uploaded_files:\n", 49 | " shutil.move(fname, os.path.join(input_dir, fname))\n", 50 | " \n", 51 | "# === Step 5: Process each file ===\n", 52 | "for fname in os.listdir(input_dir):\n", 53 | "if fname.endswith('.xlsx'):\n", 54 | "try:\n", 55 | " input_path = os.path.join(input_dir, fname)\n", 56 | " df = pd.read_excel(input_path, engine='openpyxl')\n", 57 | " df.columns = df.columns.str.strip()\n", 58 | " \n", 59 | " # Check and clean 'Network element'\n", 60 | " if not any(col.strip().lower() == 'network element' for col in df.columns):\n", 61 | " print(f"⚠️ Skipping {fname}: 'Network element' column not found.")\n", 62 | " continue\n", 63 | " \n", 64 | " # Normalize column names\n", 65 | " df.rename(columns={col: 'Network element' for col in df.columns if col.strip().lower() ==\n", 66 | "'network element'}, inplace=True)\n", 67 | " df['Network element'] = df['Network element'].astype(str).str.strip()\n", 68 | " \n", 69 | " # Merge City from CBOSS\n", 70 | " df = df.merge(cboss_lookup, on='Network element', how='left')\n", 71 | " df['City from CBOSS'] = df['City from CBOSS'].astype(str).str.strip()\n", 72 | " \n", 73 | " # Merge Depot\n", 74 | " df = df.merge(depot_df, on='City from CBOSS', how='left')\n", 75 | " \n", 76 | " # Reorder columns\n", 77 | " fixed_cols = ['Network element', 'City from CBOSS', 'Depot']\n", 78 | " other_cols = [c for c in df.columns if c not in fixed_cols]\n", 79 | " df = df[fixed_cols + other_cols]\n", 80 | " \n", 81 | " # Save file\n", 82 | " output_file = f"updated_{fname}"\n", 83 | " output_path = os.path.join(output_dir, output_file)\n", 84 | " df.to_excel(output_path, index=False, engine='openpyxl')\n", 85 | " \n", 86 | " # Download\n", 87 | " print(f"✅ Processed: {fname}")\n", 88 | " files.download(output_path)\n", 89 | " \n", 90 | " except Exception as e:\n", 91 | " print(f"❌ Error processing {fname}: {e}")\n", 92 | " \n", 93 | "print("\\n�� All files processed and downloaded!")\n" 94 | ] 95 | } 96 | ], 97 | "metadata": { 98 | "language_info": { 99 | "name": "python" 100 | } 101 | }, 102 | "nbformat": 4, 103 | "nbformat_minor": 5 104 | } 105 | --------------------------------------------------------------------------------