Ich habe eine Excel-Datei
Arm_id DSPName DSPCode HubCode PinCode PPTL
1 JaVAS 01 AGR 282001 1,2
2 JaVAS 01 AGR 282002 3,4
3 JaVAS 01 AGR 282003 5,6
Ich möchte eine Zeichenfolge im Formular speichern Arm_id,DSPCode,Pincode
. Dieses Format ist konfigurierbar, dh es kann sich ändern zu DSPCode,Arm_id,Pincode
. Ich speichere es in einer Liste wie:
FORMAT = ['Arm_id', 'DSPName', 'Pincode']
Wie lese ich den Inhalt einer bestimmten Spalte mit dem angegebenen Namen, sofern der FORMAT
konfigurierbar ist?
Das habe ich versucht. Derzeit kann ich den gesamten Inhalt der Datei lesen
from xlrd import open_workbook
wb = open_workbook('sample.xls')
for s in wb.sheets():
#print 'Sheet:',s.name
values = []
for row in range(s.nrows):
col_value = []
for col in range(s.ncols):
value = (s.cell(row,col).value)
try : value = str(int(value))
except : pass
col_value.append(value)
values.append(col_value)
print values
Meine Ausgabe ist
[[u'Arm_id', u'DSPName', u'DSPCode', u'HubCode', u'PinCode', u'PPTL'], ['1', u'JaVAS', '1', u'AGR', '282001', u'1,2'], ['2', u'JaVAS', '1', u'AGR', '282002', u'3,4'], ['3', u'JaVAS', '1', u'AGR', '282003', u'5,6']]
Dann mache ich eine Schleife, um values[0]
herauszufinden, FORMAT
in welchem Inhalt ich mich befinde, und erhalte values[0]
dann den Index von Arm_id, DSPname and Pincode
in values[0]
und in der nächsten Schleife kenne ich den Index aller FORMAT
Faktoren, um herauszufinden, welchen Wert ich erhalten muss.
Aber das ist so eine schlechte Lösung.
Wie erhalte ich die Werte einer bestimmten Spalte mit Namen in der Excel-Datei?
dict()
oder eine eigene Datenklasse erstellen.Antworten:
Dies ist ein Ansatz:
Sie müssen keine benutzerdefinierte Klasse verwenden, sondern können einfach eine nehmen
dict()
. Wenn Sie jedoch eine Klasse verwenden, können Sie wie oben gezeigt über die Punktnotation auf alle Werte zugreifen.Hier ist die Ausgabe des obigen Skripts:
quelle
Eine etwas späte Antwort, aber mit Pandas ist es möglich, direkt eine Spalte einer Excel-Datei zu erhalten:
quelle
import xlrd
oben hinzu, damit dies funktioniert.read_excel
erfordertxlrd
. Wenn immerImportError: No module named 'xlrd'
, dann tunpip install xlrd
Die wichtigsten Teile sind also, den Header (
col_names = s.row(0)
) zu greifen und beim Durchlaufen der Zeilen die erste Zeile zu überspringen, die nicht benötigt wirdfor row in range(1, s.nrows)
- unter Verwendung des Bereichs ab 1 (nicht der impliziten 0). Anschließend verwenden Sie zip, um durch die Zeilen zu gehen, in denen 'name' als Kopfzeile der Spalte steht.quelle
Durch die Verwendung von Pandas können wir Excel leicht lesen.
Test unter: https://repl.it Referenz: https://pythonspot.com/read-excel-with-pandas/
quelle
xlrd
?Hier ist der Code zum Lesen einer Excel-Datei und zum Drucken aller in Spalte 1 vorhandenen Zellen (mit Ausnahme der ersten Zelle, dh der Kopfzeile):
quelle
Der Ansatz, den ich gewählt habe, liest die Header-Informationen aus der ersten Zeile, um die Indizes der interessierenden Spalten zu bestimmen.
Sie haben in der Frage erwähnt, dass die Werte auch in eine Zeichenfolge ausgegeben werden sollen. Ich erstelle dynamisch eine Formatzeichenfolge für die Ausgabe aus der FORMAT-Spaltenliste. Zeilen werden an die Wertezeichenfolge angehängt, die durch ein neues Zeilenzeichen getrennt ist.
Die Reihenfolge der Ausgabespalten wird durch die Reihenfolge der Spaltennamen in der FORMAT-Liste bestimmt.
In meinem Code unten ist der Fall des Spaltennamens in der FORMAT-Liste wichtig. In der obigen Frage haben Sie 'Pincode' in Ihrer FORMAT-Liste, aber 'PinCode' in Ihrem Excel. Dies würde unten nicht funktionieren, es müsste 'PinCode' sein.
Für die Beispieleingabe, die Sie oben angegeben haben, gibt dieser Code Folgendes aus:
Und weil ich ein Python-Noob bin, sind Requisiten: diese Antwort , diese Antwort , diese Frage , diese Frage und diese Antwort .
quelle
firstRow[x].value
soll seinheaderRow[x].value
Obwohl ich fast immer nur Pandas dafür benutze, wird mein aktuelles kleines Tool in eine ausführbare Datei gepackt und das Einbeziehen von Pandas ist übertrieben. Also habe ich eine Version von poidas Lösung erstellt, die zu einer Liste benannter Tupel führte. Sein Code mit dieser Änderung würde folgendermaßen aussehen:
quelle