Ich habe eine Reihe von Excel-Dateien mit einem Blatt und möchte eine Liste mit Unterlisten erstellen. Jede Unterliste soll 1) den Dateinamen, 2) den Blattnamen und 3) die Zeilenwerte für jede Zeile im Blatt mit Ausnahme der ersten (Kopf-) Zeile enthalten. Ich habe folgendes versucht:
rdir=r"d:\temp"
import xlrd,spss
fils=[fil for fil in os.listdir(rdir) if fil.endswith(".xls")]
allData=[]
for cnt,fil in enumerate(fils):
wb=xlrd.open_workbook(os.path.join(rdir,fil))
allData.append([fil]+[wb.sheets()[0].name]+wb.sheets()[0].row_values(row) for row in range(1,wb.sheets()[0].nrows))
Dies gibt mir nicht die Liste, nach der ich suche, sondern eine Liste von Generatorobjekten. Was mache ich hier falsch und wie kann ich die gesuchte Liste erhalten?
3 Antworten
Es sieht so aus, als ob Ihr Listenverständnis falsch ist. Es sollte lauten:
allData.append([fil]+[wb.sheets()[0].name]+[wb.sheets()[0].row_values(row) for row in range(1,wb.sheets()[0].nrows)])
Außerdem würde ich empfehlen, s1 = wb.sheets () [0] einzurichten, um den Code besser lesbar und etwas schneller zu machen
rdir=r"d:\temp"
import xlrd,spss
fils=[fil for fil in os.listdir(rdir) if fil.endswith(".xls")]
allData=[]
for cnt,fil in enumerate(fils):
wb=xlrd.open_workbook(os.path.join(rdir,fil))
s1 = wb.sheets()[0]
allData.append([fil]+[s1.name]+[s1.row_values(row) for row in range(1,s1.nrows)])
Außerdem haben Sie in Ihrem Kommentar erwähnt, dass Sie sehen möchten, wie dies mit mehreren Blättern geschieht. Angenommen, Ihre Felder in jedem sind die gleichen, könnten Sie dies verwenden:
rdir=r"d:\temp"
import xlrd,spss
fils=[fil for fil in os.listdir(rdir) if fil.endswith(".xls")]
allData=[]
for cnt,fil in enumerate(fils):
wb=xlrd.open_workbook(os.path.join(rdir,fil))
for sheet in wb.sheets():
allData.append([fil]+[sheet.name]+[sheet.row_values(row) for row in range(1,sheet.nrows)])
Vielen Dank an alle für die Eingabe! Die Liste, die ich brauchte, wird von generiert
rdir=r"d:\temp"
import xlrd,spss
fils=[fil for fil in os.listdir(rdir) if fil.endswith(".xls")]
allData=[]
for cnt,fil in enumerate(fils):
wb=xlrd.open_workbook(os.path.join(rdir,fil))
ws=wb.sheets()[0]
for row in range(1,ws.nrows):
allData.append([fil]+[ws.name]+[val for val in ws.row_values(row)])
Sie sind sich nicht sicher, was Sie wollen. Ich denke, das Problem ist, dass Sie [] im Listenverständnis fehlen.
allData.append([fil]+[wb.sheets()[0].name]+ [ wb.sheets()[0].row_values(row) for row in range(1,wb.sheets()[0].nrows) ] )
Dann sollte Ihre endgültige Liste ["Dateiname", "Arbeitsblattname", [Zeilenwertliste] sein]
Seien wir einfach:
>>> list_a = [1,2,3]
>>> list_b = [ ['a','b','c'],['a','b','c'],['a','b','c']]
>>> [list_a + x for x in list_b]
[[1, 2, 3, 'a', 'b', 'c'], [1, 2, 3, 'a', 'b', 'c'], [1, 2, 3, 'a', 'b', 'c']]
>>> [list_a + [ x for x in list_b ] ]
[[1, 2, 3, ['a', 'b', 'c'], ['a', 'b', 'c'], ['a', 'b', 'c']]]
Verwandte Fragen
Neue Fragen
python
Python ist eine dynamisch typisierte Mehrzweck-Programmiersprache mit mehreren Paradigmen. Es wurde entwickelt, um schnell zu lernen, zu verstehen, zu verwenden und eine saubere und einheitliche Syntax durchzusetzen. Bitte beachten Sie, dass Python 2 ab dem 01.01.2020 offiziell nicht mehr unterstützt wird. Fügen Sie für versionenspezifische Python-Fragen das Tag [python-2.7] oder [python-3.x] hinzu. Wenn Sie eine Python-Variante (z. B. Jython, PyPy) oder eine Bibliothek (z. B. Pandas und NumPy) verwenden, fügen Sie diese bitte in die Tags ein.