Seite 1 von 1

CSV mit unterschiedlichen Zellenanzahl pro Spalte

Verfasst: Montag 9. März 2020, 17:12
von EW1967
Hallo Python-Forum,

ich bin neu und Anfänger!

eine csv in folgender Form in ein TableWidget einlesen
a,b,c,d
d,s,a,f
w,e,t,r
usw. klappt so weit :-)

self.ui.tW_daten.setRowCount(0)
with open('Header.csv', "r", newline='') as file:
reader = csv.reader(file, delimiter=',', quotechar='|')
for line in reader:
row = self.ui.tW_daten.rowCount()
self.ui.tW_daten.insertRow(row)
self.ui.tW_daten.setItem(row, 0, QtWidgets.QTableWidgetItem(line[0]))
self.ui.tW_daten.setItem(row, 1, QtWidgets.QTableWidgetItem(line[1]))
self.ui.tW_daten.setItem(row, 2, QtWidgets.QTableWidgetItem(line[2]))
self.ui.tW_daten.setItem(row, 3, QtWidgets.QTableWidgetItem(line[3]))


aber wie lese ich folgende csv ein
a,b,c
a,b,c,d,e
a,b
a,b,c,d,e,f,g

hier bekomme ich die Fehlermeldung :
Traceback (most recent call last):
File "C:/Start.py", line 86, in readCsvFile
self.ui.tW_daten.setItem(row, 26, QtWidgets.QTableWidgetItem(line[26]))
IndexError: list index out of range

Ich danke jedem der mir hilft!!

Re: CSV mit unterschiedlichen Zellenanzahl pro Spalte

Verfasst: Dienstag 10. März 2020, 08:33
von sparrow
Bitte gewöhne dir gleich sprechende Namen für Variablen an, die auch das aussagen, was sie sind. "row" beinhaltet keine "Reihe" sondern die "Zeilennummer".
Den Fehler umgehst du, indem du vorher prüfst, ob "line" auch genug Elemente hat. Wenn es nur 2 hat, kannst du nicht auf das 3. zugreifen.
Eigentlich willst du aber eine Schleife.

Und poste Code hier bitte in Code-Tags damit die Einrückung erhalten bleibt. Die werden automatisch eingefügt, wenn du auf "Vollständiger Editor & Vorschau" klickst und dort "</>" drückst.

Eingerückt wird in Python nach Konvention immer mit 4 Leerzeichen. Keine Tabs oder eine andere Anzahl von Leerzeichen.

ungetestet:

Code: Alles auswählen

self.ui.tW_daten.setRowCount(0)
with open('Header.csv', "r", newline='') as file:
    reader = csv.reader(file, delimiter=',', quotechar='|')
    for line in reader:
        row_number = self.ui.tW_daten.rowCount()
        self.ui.tW_daten.insertRow(row_number)
        for column_number, value in enumerate(line):
            self.ui.tW_daten.setItem(row_number, column_number, QtWidgets.QTableWidgetItem(value))

Re: CSV mit unterschiedlichen Zellenanzahl pro Spalte

Verfasst: Dienstag 10. März 2020, 09:44
von __blackjack__
`line` würde ich dann noch `row` nennen, weil `line` eine Textzeile ist und man da eher keine Liste mit Datensatzwerten erwartet. Der Name `row` ist ja jetzt verfügbar. :-)