2025-08-05 14:38:54 +04:00

94 lines
2.9 KiB
Python

import pandas as pd
import re
def normalize_io_term(term):
"""Handle IO term variations like IO1 vs IO01"""
if pd.isna(term):
return []
term_str = str(term).upper()
variations = [term_str]
# Handle IO padding variations
if term_str.startswith('IO') and len(term_str) > 2:
num_part = term_str[2:]
if num_part.isdigit():
# Add both padded and unpadded versions
unpadded = f"IO{int(num_part)}" # Remove leading zeros
padded = f"IO{num_part.zfill(2)}" # Ensure 2-digit padding
variations.extend([unpadded, padded])
return list(set(variations)) # Remove duplicates
def normalize_name(name):
if pd.isna(name):
return name
return re.sub(r'\d+', lambda m: str(int(m.group(0))), str(name))
def normalize_vfd_name(name):
"""Only normalize VFD names, preserve others as-is"""
if pd.isna(name):
return name
name_str = str(name).upper()
if 'VFD' in name_str:
return normalize_name(name)
return str(name)
def normalize_io_path(path):
if pd.isna(path):
return path
path_str = str(path)
if ':' in path_str:
prefix, suffix = path_str.split(':', 1)
# Only normalize VFD paths
if 'VFD' in prefix.upper():
normalized_prefix = normalize_name(prefix)
return f"{normalized_prefix}:{suffix}"
return path_str
return path_str
def assign_partnumber(row):
tagname = str(row['TAGNAME']).upper()
existing_partnumber = row['PARTNUMBER']
# If there's already a valid part number, keep it
if pd.notna(existing_partnumber) and existing_partnumber != '':
return existing_partnumber
# Only assign default part numbers if no existing part number
# FIOH devices
if 'FIOH' in tagname:
return 'TBIL-M1-16DXP'
# DPM devices (only if contains DPM but NOT FIO)
elif 'DPM' in tagname and 'FIO' not in tagname:
return 'OS30-002404-2S'
# PMM devices
elif 'PMM' in tagname:
return '1420-V2-ENT'
# SIO devices
elif 'SIO' in tagname:
return '0980SSL3131-121-007D-202'
# IB16S devices (check before IB16 to avoid conflict)
elif 'IB16S' in tagname:
return '1756-IB16S'
# IB16 devices
elif 'IB16' in tagname:
return '1756-IB16'
# OB16E devices
elif 'OB16E' in tagname:
return '1756-OB16E'
else:
return ''
def combine_desc(row):
desca = str(row['DESCA']) if pd.notna(row['DESCA']) and row['DESCA'] != '' else ''
descb = str(row['DESCB']) if pd.notna(row['DESCB']) and row['DESCB'] != '' else ''
if desca and descb:
return f"{desca} {descb}"
elif desca:
return desca
elif descb:
return descb
else:
return ''