Seite 1 von 1

Excel to defaultdict(dict)

Verfasst: Freitag 7. Juni 2019, 11:38
von DMD-OS
Ich habe eine Excel-Datei, die ich gern in defaultdict(dict) einlesen möchte:

Code: Alles auswählen

       ""                         ""                      ""         ""            ""          ""       ""
       ""                         ""                    "                       Adresse                    "
"Laufende Nummer"    "Positionstext Rechnungslegung"    "Name"    "Straße"    "Hausnummer"    "Ort"    "PLZ"
       ""                         ""                      ""         ""            ""          ""       ""
        101                   Mustertext                Gebers   Hansastraße     154         Irgendwo  1234
        102
        103
        104
Mein Code:

Code: Alles auswählen

    def import_IGM_FILE(self):
        col_list = []
        for col_index in range(self.WB_TABLE_WRITE.ncols):
            col = []
            for row_index in range(self.WB_TABLE_WRITE.nrows):
                valor = self.WB_TABLE_WRITE.cell(row_index, col_index).value
                for crange in self.WB_TABLE_WRITE.merged_cells:
                    rlo, rhi, clo, chi = crange
                    if rlo <= row_index < rhi and clo <= col_index < chi:
                        valor = self.WB_TABLE_WRITE.cell(rlo, clo).value
                        break
                col.append(valor)
            col_list.append(col)

        self.columns = defaultdict(dict)
        for (a, b, *c) in col_list:
            self.columns[a][b] = c
        return self.columns
Meine Ausgabe:

Code: Alles auswählen

 {'': ['', '', '', '', '', ''], 'Adresse': ['PLZ', '', 49666.0, '', '', '']}
Und wenn ich eine Zeile zugebe, bekomme ich eine Fehlermeldung:

Code: Alles auswählen

        self.columns = defaultdict(dict)
        for (a, b, c, *d) in col_list:
            self.columns[a][b][c] = d
        return self.columns
Felermeldung:

Code: Alles auswählen

Traceback (most recent call last):
  File "C:/Users/colling/Documents/PyCharm/Dateiimport/MAIN.py", line 61, in <module>
    imp.main()
  File "C:/Users/colling/Documents/PyCharm/Dateiimport/MAIN.py", line 41, in main
    IGM.IGM_IMPORT(sheet_name, self.INPUT_FILE, output_igm_path)
  File "C:\Users\colling\Documents\PyCharm\Dateiimport\IGM.py", line 30, in __init__
    self.import_IGM_FILE()
  File "C:\Users\colling\Documents\PyCharm\Dateiimport\IGM.py", line 49, in import_IGM_FILE
    self.columns[a][b][c] = d
KeyError: ''
Vielleicht kann mir jemand helfen.

Re: Excel to defaultdict(dict)

Verfasst: Freitag 7. Juni 2019, 11:42
von sparrow
Wie soll denn die Datenstruktur hinterher aussehen?

Re: Excel to defaultdict(dict)

Verfasst: Freitag 7. Juni 2019, 15:27
von DMD-OS
ich möchte jede spalte auslesen, so wie sie oben steht. zusammengefügte zeilen sollen entsprechend übernommen werden.
Also so (ungefähr)...

Code: Alles auswählen

{
" :{ " :{'Laufende \nNummer': ['', 101, 102, 103, 104], '' :{'Positionstext Rechnungslegung': ['', Mustertext, '', '', '']},
" :{ 'Adresse' :{'Name': ['', Gebers, '', '', ''], 'Straße': ['', Hansastraße, '', '', ''], 'Ort': ['', Irgendwo, '', '', ''], 'PLZ': ['', 1234, '', '', '']}
}

Re: Excel to defaultdict(dict)

Verfasst: Freitag 7. Juni 2019, 16:27
von sparrow
Warum willst du die denn in eine solche Form bringen?
Für die Weiterverarbeitung ist das doch sehr ungünstig, weil du die ganzen einzelnen Datensätze zerpflückst.

Re: Excel to defaultdict(dict)

Verfasst: Freitag 7. Juni 2019, 17:05
von sparrow
Und bist du dir sicher, dass du den Effekt haben möchtest, dass an eine Instanzvariable (nämlich self.columns) zu binden?
Wenn man das tut und das ganze anschließend per return zurück gibt, ist das zumindest seltsam.

Re: Excel to defaultdict(dict)

Verfasst: Freitag 7. Juni 2019, 18:54
von Sirius3
@DMD-OS: das hatten wir doch vor einer Weile schon einmal. Du willst nicht die gemergten Zellen irgendwie aufteilen, sondern komplett ignorieren, weil die gesamte Header-Information in Zeile 3 steht. Du kannst also mit Pandas die Excel-Datei in einem Rutsch lesen, wenn Du die ersten beiden Zeilen ignorierst und hast dann eine schöne Struktur zum Weiterarbeiten.

Re: Excel to defaultdict(dict)

Verfasst: Freitag 7. Juni 2019, 19:27
von DMD-OS
wieso taucht denn ÜBERHAUPT der fehler auf, den ich da bekomme???

Re: Excel to defaultdict(dict)

Verfasst: Freitag 7. Juni 2019, 23:15
von __blackjack__
@DMD-OS: Weil es den Schlüssel in dem normalen `dict` nicht gibt‽ Warum hast Du den Fehler da nicht erwartet? Was hätte denn Deiner Meinung nach stattdessen passieren sollen?