try: import re from pandas import DataFrame from typing import Union from logging import debug as dbg, getLogger import win32clipboard def create_table(xmlStr: str) -> Union[DataFrame, Exception]: dataDict = { "SEQ": [], } MATCH_SCENARIO = "((?!((?!" UPDATE_REGEX = r"\n?((?!(.)*<", group) if valueGroup == None: valueGroup = re.search("e\"(((?!(\w+|\.)+", update).span() dbg(f"value: {valueMatch}") value = update[valueMatch[0]+1:valueMatch[1]-8] dbg(f"{seq} UPDATE | {id} : {value}") senarioDict[id] = value # Now merge the values from that senario into the main dict seen = [] for key in dataDict.keys(): dbg(dataDict[key]) try: senarioValue = senarioDict[key] except KeyError: senarioValue = '' dataDict[key].append(senarioValue) seen.append(key) for key in [k for k in senarioDict.keys() if k not in seen]: dataFill = ['' for _ in range(1,int(seq))] dataFill.append(senarioDict[key]) dataDict[key] = dataFill dbg(f"New key: {key} | {dataDict[key]}") dbg(f"{seq} | {dataDict}\n") dbg(dataDict) if getLogger().level == 10: for key in dataDict.keys(): dbg(f"{key} : {len(dataDict[key])}") try: table = DataFrame(dataDict) table.set_index('SEQ', inplace=True) dbg(table) if table.empty: raise Exception("No data found...", color='RED', effect='BOLD') return table except Exception as e: return e def process_clipboard() -> str: correct = False while not correct: win32clipboard.OpenClipboard() try: xml = win32clipboard.GetClipboardData() except: xml = "None" win32clipboard.CloseClipboard() print(f"\n\nYour current clipboard is as follows:") print(xml) yn = input("\nIs this the XML you'd like to parse? (y/n)\n >") if yn.lower() == "debug": getLogger().setLevel(10) print("\nYou have now entered debug mode...") correct = True if re.search("(?i)y|1", yn) != None else False if not correct: input("Please copy the xml then press enter...") return xml table = None while type(table) != DataFrame: xml = process_clipboard() table: Union[DataFrame, Exception] = create_table(xml) if type(table) != DataFrame: print(f"\n\nENCOUNTERED ERROR!:\n{table}\n") input("Please try again...") continue print(f"Table sample:") print(table) table.to_clipboard() input("This table is now in your clipboard to paste into excel.") except Exception as e: print(f"The program failed to start do the the following exception:\n{e}") input(f"Please make note of the error before closing so that you can report it.")