CMDB2CSV_Aufbaumaster.py Aufteilung in GG und Erw
This commit is contained in:
@@ -5,7 +5,7 @@ from pathlib import Path
|
|||||||
import pandas as pd
|
import pandas as pd
|
||||||
from icecream import ic
|
from icecream import ic
|
||||||
import re
|
import re
|
||||||
import numpy as np
|
#import numpy as np
|
||||||
|
|
||||||
|
|
||||||
class MainUI(QDialog): # erbt von QDialog
|
class MainUI(QDialog): # erbt von QDialog
|
||||||
@@ -17,7 +17,12 @@ class MainUI(QDialog): # erbt von QDialog
|
|||||||
self.path = None
|
self.path = None
|
||||||
self.df_vte = None
|
self.df_vte = None
|
||||||
self.df_cmdb = None
|
self.df_cmdb = None
|
||||||
self.dfb = None
|
self.df_vte_gg = None
|
||||||
|
self.df_vte_erw = None
|
||||||
|
self.df_cmdb_gg = None
|
||||||
|
self.df_cmdb_erw = None
|
||||||
|
self.dfb_gg = None
|
||||||
|
self.dfb_erw = None
|
||||||
self.openBtn.clicked.connect(self.open_file_dialog)
|
self.openBtn.clicked.connect(self.open_file_dialog)
|
||||||
self.saveBtn.clicked.connect(self.save_file_dialog)
|
self.saveBtn.clicked.connect(self.save_file_dialog)
|
||||||
self.filter = "Hostnamen"
|
self.filter = "Hostnamen"
|
||||||
@@ -46,70 +51,78 @@ class MainUI(QDialog): # erbt von QDialog
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
def collect_grundgeraete(self):
|
def collect_grundgeraete(self):
|
||||||
# Einlesen der Sheets
|
# Einlesen der Sheets allgemein
|
||||||
self.df_vte = pd.read_excel(self.filename, header=7, na_filter=False, sheet_name='VTE-Input',
|
self.df_vte = pd.read_excel(self.filename, header=7, na_filter=False, sheet_name='VTE-Input',
|
||||||
usecols=['Hostname', 'Gruppierung', 'CONFIG-ID', 'CMDB Status'], engine='pyxlsb')
|
usecols=['Hostname', 'Gruppierung', 'CONFIG-ID', 'CMDB Status'], engine='pyxlsb')
|
||||||
|
|
||||||
self.df_cmdb = pd.read_excel(self.filename, header=2, sheet_name="CMDB", engine='pyxlsb')
|
self.df_cmdb = pd.read_excel(self.filename, header=2, sheet_name="CMDB", engine='pyxlsb')
|
||||||
|
|
||||||
# Nach relevanten Spalten filtern
|
# Nach relevanten Spalten filtern Grundgeraete
|
||||||
self.df_vte = self.df_vte[self.df_vte['Gruppierung'] == 'Grundgerät']
|
# Sheet VTE
|
||||||
|
self.df_vte_gg = self.df_vte[self.df_vte['Gruppierung'] == 'Grundgerät']
|
||||||
|
# Sheet CMDB
|
||||||
|
self.df_cmdb_gg = self.df_cmdb[self.df_cmdb['Filter'] == 'Grundgerät']
|
||||||
|
|
||||||
self.df_cmdb = self.df_cmdb[self.df_cmdb['Filter'] == 'Grundgerät']
|
# Nach relevanten Spalten filtern Erweiterung
|
||||||
|
self.df_vte_erw = self.df_vte[self.df_vte['Gruppierung'] == 'Erweiterung']
|
||||||
|
|
||||||
self.df_cmdb = self.df_cmdb.drop(
|
self.df_cmdb_erw = self.df_cmdb[self.df_cmdb['Filter'] == 'Erweiterung']
|
||||||
|
|
||||||
|
# Teil Grundgeräte
|
||||||
|
self.df_cmdb_gg = self.df_cmdb_gg.drop(
|
||||||
columns=['WV-Start', 'WV-Ende', 'CMDB-Status', 'Aufgabe Schritt', 'Filter', 'Waermeabgabe [BTU/h]',
|
columns=['WV-Start', 'WV-Ende', 'CMDB-Status', 'Aufgabe Schritt', 'Filter', 'Waermeabgabe [BTU/h]',
|
||||||
'kalk. Strom [A]'])
|
'kalk. Strom [A]'])
|
||||||
|
|
||||||
|
|
||||||
# Einfügen von Spalten in die CMDB-Tabelle
|
# Einfügen von Spalten in die CMDB-Tabelle
|
||||||
self.dfb = self.df_vte.merge(self.df_cmdb, on=['Hostname'], how='left')
|
self.dfb_gg = self.df_vte_gg.merge(self.df_cmdb_gg, on=['Hostname'], how='left')
|
||||||
|
|
||||||
|
|
||||||
# Spalte für Mandanten Kontaktzuweisung
|
# Spalte für Mandanten Kontaktzuweisung
|
||||||
self.dfb.insert(loc=7, column='Mandanten Kontaktzuweisung', value='Mandant')
|
self.dfb_gg.insert(loc=7, column='Mandanten Kontaktzuweisung', value='Mandant')
|
||||||
|
|
||||||
# Spalte für Segmente
|
# Spalte für Segmente
|
||||||
self.dfb.insert(loc=8, column='Segment', value='')
|
self.dfb_gg.insert(loc=8, column='Segment', value='')
|
||||||
|
|
||||||
# Spalte für Domains
|
# Spalte für Domains
|
||||||
self.dfb.insert(loc=9, column='Domain', value='')
|
self.dfb_gg.insert(loc=9, column='Domain', value='')
|
||||||
|
|
||||||
# Spalte einfügen für HE
|
# Spalte einfügen für HE
|
||||||
self.dfb.insert(loc=14, column='HE', value='')
|
self.dfb_gg.insert(loc=14, column='HE', value='')
|
||||||
|
|
||||||
# Einschub
|
# Einschub
|
||||||
self.dfb.insert(loc=15, column='Einschub', value='')
|
self.dfb_gg.insert(loc=15, column='Einschub', value='')
|
||||||
|
|
||||||
# Montage --> nur horizontal
|
# Montage --> nur horizontal
|
||||||
self.dfb.insert(loc=16, column='Montage', value='horizontal')
|
self.dfb_gg.insert(loc=16, column='Montage', value='horizontal')
|
||||||
|
|
||||||
# Formfaktor
|
# Formfaktor
|
||||||
self.dfb.insert(loc=17, column='Formfaktor', value='19"')
|
self.dfb_gg.insert(loc=17, column='Formfaktor', value='19"')
|
||||||
|
|
||||||
# Masseinheit
|
# Masseinheit
|
||||||
self.dfb.insert(loc=18, column='Masseinheit', value='Zoll')
|
self.dfb_gg.insert(loc=18, column='Masseinheit', value='Zoll')
|
||||||
|
|
||||||
# Spaltenanmen mit Sonderzeichen anzeigen
|
# Spaltenanmen mit Sonderzeichen anzeigen
|
||||||
columns_with_special_chars = [col for col in self.dfb.columns if self.has_special_characters(col)]
|
columns_with_special_chars = [col for col in self.dfb_gg.columns if self.has_special_characters(col)]
|
||||||
|
|
||||||
print("Spaltenheader mit Sonderzeichen:", columns_with_special_chars)
|
print("Spaltenheader mit Sonderzeichen:", columns_with_special_chars)
|
||||||
|
|
||||||
# Führende Leerzeichen in allen Spalten entfernen
|
# Führende Leerzeichen in allen Spalten entfernen
|
||||||
self.dfb = self.dfb.apply(lambda x: x.str.lstrip() if x.dtype == "object" else x)
|
self.dfb_gg = self.dfb_gg.apply(lambda x: x.str.lstrip() if x.dtype == "object" else x)
|
||||||
|
|
||||||
# Alle Floats in Strings umwandeln
|
# Alle Floats in Strings umwandeln
|
||||||
self.dfb = self.dfb.applymap(lambda x: str(x) if isinstance(x, float) else x)
|
self.dfb_gg = self.dfb_gg.applymap(lambda x: str(x) if isinstance(x, float) else x)
|
||||||
|
|
||||||
self.dfb = self.dfb.apply(self.suche_Einschub, axis=1)
|
self.dfb_gg = self.dfb_gg.apply(self.suche_Einschub, axis=1)
|
||||||
|
|
||||||
self.dfb = self.dfb.apply(self.montageort, axis=1)
|
self.dfb_gg = self.dfb_gg.apply(self.montageort, axis=1)
|
||||||
|
|
||||||
self.dfb = self.dfb.apply(self.prüfe_und_setze_wert, axis=1)
|
self.dfb_gg = self.dfb_gg.apply(self.pruefe_und_setze_wert, axis=1)
|
||||||
|
|
||||||
# Setzen von int für HE und Anz. HE
|
# Setzen von int für HE und Anz. HE
|
||||||
self.dfb['HE'] = self.dfb['HE'].apply(lambda x: x if pd.isnull(x) else str(int(x)))
|
self.dfb_gg['HE'] = self.dfb_gg['HE'].apply(lambda x: x if pd.isnull(x) else str(int(x)))
|
||||||
self.dfb['belegte\nHE'] = self.dfb['belegte\nHE'].apply(lambda x: x if pd.isnull(x) else str(int(x)))
|
|
||||||
|
# self.dfb['belegte\nHE'] = self.dfb['belegte\nHE'].apply(lambda x: x if pd.isnull(x) else str(int(x)))
|
||||||
|
|
||||||
|
|
||||||
##############################################################################################
|
##############################################################################################
|
||||||
@@ -128,7 +141,7 @@ class MainUI(QDialog): # erbt von QDialog
|
|||||||
|
|
||||||
def montageort(self, montage):
|
def montageort(self, montage):
|
||||||
# Fehlerbereinigung
|
# Fehlerbereinigung
|
||||||
ic(montage)
|
ic("Montage: ", montage)
|
||||||
if montage['ID\nStandort']not in ("Ber-PS", "Bon-BTW"):
|
if montage['ID\nStandort']not in ("Ber-PS", "Bon-BTW"):
|
||||||
print("Kein Standort P40 oder BTW")
|
print("Kein Standort P40 oder BTW")
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
@@ -154,7 +167,7 @@ class MainUI(QDialog): # erbt von QDialog
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
def prüfe_und_setze_wert(self, zeile):
|
def pruefe_und_setze_wert(self, zeile):
|
||||||
#ic(zeile)
|
#ic(zeile)
|
||||||
################################################################
|
################################################################
|
||||||
if zeile['Hostname'][4:6] == "10":
|
if zeile['Hostname'][4:6] == "10":
|
||||||
@@ -373,14 +386,14 @@ class MainUI(QDialog): # erbt von QDialog
|
|||||||
return zeile
|
return zeile
|
||||||
|
|
||||||
def save_file_dialog(self):
|
def save_file_dialog(self):
|
||||||
ic(self.dfb)
|
ic(self.dfb_gg)
|
||||||
options = QFileDialog.Options()
|
options = QFileDialog.Options()
|
||||||
options |= QFileDialog.DontUseNativeDialog
|
options |= QFileDialog.DontUseNativeDialog
|
||||||
self.savefilename, _ = QFileDialog.getSaveFileName(self,
|
self.savefilename, _ = QFileDialog.getSaveFileName(self,
|
||||||
"Save File", "", "CSV(*.csv);;CSV Files(*.csv)",
|
"Save File", "", "CSV(*.csv);;CSV Files(*.csv)",
|
||||||
options=options)
|
options=options)
|
||||||
|
|
||||||
self.dfb.to_csv(self.savefilename, index=None, header=True, encoding='utf-8')
|
self.dfb_gg.to_csv(self.savefilename, index=None, header=True, encoding='utf-8')
|
||||||
print("Datei wurde gespeichert:", self.savefilename)
|
print("Datei wurde gespeichert:", self.savefilename)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user