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!!
CSV mit unterschiedlichen Zellenanzahl pro Spalte
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:
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))
- __blackjack__
- User
- Beiträge: 13117
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
`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.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman