Fehler bei Xlrd

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
piniuus
User
Beiträge: 4
Registriert: Freitag 20. Mai 2016, 18:43

Hallo,

ich habe ein Programm geschrieben um damit xls Dateien zu lesen und in csv zu schreiben. Das Programm funktioniert soweit auch, nur habe ich ein Problem bei leeren Zellen.

Auszugsweise hier ein Teil des Programms:

Code: Alles auswählen

import xlrd
import csv

file_location = "/home/1/Schreibtisch/python/leer.xls"
workbook = xlrd.open_workbook(file_location)
sheet = workbook.sheet_by_index(0)

c = csv.writer(open("/home/1/Schreibtisch/python/50.csv", "w"))
c.writerow([sheet.cell_value(5, 2)] + [sheet.cell_value(15, 2)] + [sheet.cell_value(67, 13)])
Die Zellen sind alle leer.
Das Ergebnis ist:

Traceback (most recent call last):
File "/home/1/PycharmProjects/untitled/3.py", line 9, in <module>
c.writerow([sheet.cell_value(5, 2)] + [sheet.cell_value(15, 2)] + [sheet.cell_value(67, 13)])
File "/usr/local/lib/python3.4/dist-packages/xlrd/sheet.py", line 407, in cell_value
return self._cell_values[rowx][colx]
IndexError: list index out of range

Würde mich sehr über eine Antwort freuen.
BlackJack

@piniuus: Die sind nicht nur leer, mindestens eine existiert nicht. Was soll man da jetzt sagen? Greif halt nicht auf nicht existierende Zellen zu. Prüfe ob die Zellen existieren oder reagiere entsprechend auf die Ausnahme.

Und drei Listen mit jeweils einem Element zu erstellen um die dann mit ``+`` zusammenzufügen wo bei jeder der beiden Operationen jeweils eine neue Liste erstellt, die Inhalte der beiden in die neue Liste kopiert und dann die beiden alten verworfen werden, ist ein wenig umständlich. Da würde man einfacher *eine* Liste mit drei Elementen hinschreiben.
piniuus
User
Beiträge: 4
Registriert: Freitag 20. Mai 2016, 18:43

Danke für die Antwort!
Es ist so, das ich versuche ein Programm zu schreiben mit dem ich bestimmte Zellen aus einer xls auslesen kann. Je nach Datei sind nicht alle Zellen beschrieben, existent oder auch mit "div/0" ausgefüllt. Daher das ich viele Datein auslesen will, kann ich die Zellen nicht aus dem Programm nehmen,

Könntest du mir noch ein Tipp geben wie ich 3 Elemente in eine Liste bekomme?
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

@piniuus: Du mußt halt festlegen, was passieren soll, wenn die Zelle nicht existiert, weil sie außerhalb des definierten Bereichs liegt. Am einfachsten geht das, wenn Du den IndexError einfach abfängst:

Code: Alles auswählen

try:
    wert = sheet.cell_value(5, 2)
except IndexError:
    wert = "sonst was"
Antworten