Ich arbeite an einem excel workbook
. Ich benutze python
Skript für den Betrieb an der workbook
. Aber es gibt zwei Probleme:
1) Es gibt einige Zellen, die integer
Werte haben. Wenn ich diese Werte lese und den gelesenen Wert in eine Berichtsdatei (.txt
) lege, fügt sie .0
mit der Nummer hinzu. Z.B. Wenn es Wert 6 gibt, gibt es 6,0, wenn es das nicht tun soll. Ich habe gelesen, dass es nichts als integer
in Excel gibt. Immer noch habe ich 1000s von Parametern und daher kann ich nicht alle direkt in integer
umwandeln mit einigen python
Funktion, denn das kann Werte konvertieren, die eigentlich float
auch sind.
2) Und wenn ich boolean
TRUE und FALSE lese, gibt es mir 1 und 0. Ich möchte was auch immer text
Ich sehe in der Excel-Arbeitsmappe auf meinem Desktop. Ich möchte keine Conversions wie diese.
Ich verwende xlrd
für excel
Operationen in python
.
Bitte sagen Sie mir, was ich tun soll, um dieses Problem zu lösen?
Hinweis: Mein Excel-Blatt enthält mehr als 100 Blatt und ich kann nicht „wahr oder falsch“ mit „1 und 0“ etcNicht in der Lage, Daten von Excel zu lesen, wie es auf dem Desktop
Antwort
xlrd
Sie alle Ihre Zahlen als Schwimmer schenkt, und Ihre booleans als ganze Zahlen. wie man sie ausdrucken, ist eine reine python Angelegenheit.
Ich nehme an, du weißt es schon h-Zellen enthalten boolesche Werte. (Wenn nicht, überprüfen Sie die Zelle ctype
wie im answer von Massimo Fuccillo-- @ Details Johny Kommentar siehe unten gezeigt.) Sie können durch einfaches Drucken bool(var)
boolean Zellen als True
und False
drucken statt var
:
>>> var = 1
>>> print bool(var)
True
Beim Schreiben in eine Datei wird dies wie vorgesehen als String 'True'
(bzw. 'False'
) ausgegeben.
Da Excel nicht zwischen Ints und Floats unterscheidet, nehmen wir an, dass Sie unter integer
eine Zahl verstehen, deren Bruchteil Null ist. Wenn Python ein Float-Objekt ausgibt, fügt es .0
hinzu, um die Information beizubehalten, dass es sich um ein Float handelt.
Die einfachste Lösung wäre, dies zu unterdrücken, wenn Sie mit „% g“ für die Ausgabe Ihre Zahlen formatieren:
>>> "%g" % 6.0
'6'
jedoch "%g"
wird standardmäßig auf sechs signifikante Stellen reelle Zahlen abzurunden (obwohl können Sie festlegen, eine andere Präzision).
>>> "%g" % 2500.03
'2500.03'
>>> "%g" % 2500.003
'2500'
es ist also sicherer, wenn Sie ganzzahlige Werte erkennen sich selbst, und sie entsprechend ausdrucken:
if int(var) == var:
print int(var)
else:
print var
Ich empfehle es auf diese Art und Weise zu tun.
Obwohl Excel nicht zwischen Ganzzahlen und Gleitkommazahlen unterscheidet, ist xlrd intelligent genug, um herauszufinden, ob 1.0 oder 0.0 in Excel als boolescher Wert gemeint ist. Es gibt zwei Möglichkeiten, wie xlrd Ihnen sagt, dass eine Zelle Boolean ist. Einer ist der 'ctype', der von der Antwort von Massimo Fuccillo abgedeckt wird. Die andere Möglichkeit ist, dass xlrd tatsächlich eine ** Python-Ganzzahl ** für Excel-Boolesche Werte zurückgibt, während sie einen ** Python-Gleitkommawert ** für normale Excel-Zahlen zurückgibt. Die zweite Möglichkeit, den Unterschied zu erkennen, besteht darin, 'isinstance()' für den Wert zu verwenden. Aber "ctype" zu überprüfen ist der bevorzugte und selbstdokumentierende Weg. –
Ich habe meine Antwort bearbeitet, um dies zu erwähnen, danke. – alexis
für die boolean Frage ändern Sie ctype testen können:
for rx in range(ws.nrows):
for cx in range(ws.ncols):
print ws.cell(rx,cx).value, ws.cell(rx,cx).ctype
wenn die Excel-Urzelle ist „TRUE“ FALSCH“der ctype Wert 4
Es kann '4' sein, aber es wäre besser, es mit der' xlrd.XL_CELL_BOOLEAN'-Konstante zu vergleichen, die viel klarer in Bezug auf die Absicht ist ... –
Dies versäumt, eine der Fragen von OP zu adressieren. Wie kann ihm das Überprüfen des CTyps bei der zweiten Ausgabe helfen? Er weiß, dass es bereits boolesch ist, er möchte nur True ausgeben, wenn es True zeigt und andernfalls False ausgibt, anstatt ihrer binären Entsprechung. – Manhattan
von xlrd Dokumentation: XL_CELL_BOOLEAN 1 bedeutet TRUE, 0 bedeutet FALSE. –
Für 1, formatieren Sie Ihre Werte, um die 0 zu verlieren, bevor Sie sie in die Textdatei schreiben. Für 2 ist boolesches Wahr wahrscheinlich 1. Stellen Sie einfach eine Bedingung ein, in der 'if 1 dann true schreibt, andernfalls write False '. – Manhattan