Ich bin ziemlich neu in Python und habe jetzt Probleme damit, meine Daten für die Druckausgabe gut zu formatieren.
Ich habe eine Liste, die für zwei Überschriften verwendet wird, und eine Matrix, die den Inhalt der Tabelle enthalten soll. Wie so:
teams_list = ["Man Utd", "Man City", "T Hotspur"]
data = np.array([[1, 2, 1],
[0, 1, 0],
[2, 4, 2]])
Beachten Sie, dass die Überschriften nicht unbedingt gleich lang sind. Die Dateneinträge sind jedoch alle Ganzzahlen.
Jetzt möchte ich dies in einem Tabellenformat darstellen, ungefähr so:
Man Utd Man City T Hotspur
Man Utd 1 0 0
Man City 1 1 0
T Hotspur 0 1 2
Ich habe die Vermutung, dass es dafür eine Datenstruktur geben muss, aber ich kann sie nicht finden. Ich habe versucht, ein Wörterbuch zu verwenden und den Druck zu formatieren, ich habe for-Schleifen mit Einrückung versucht und ich habe versucht, als Zeichenfolgen zu drucken.
Ich bin mir sicher, dass es einen sehr einfachen Weg geben muss, aber ich vermisse ihn wahrscheinlich aufgrund mangelnder Erfahrung.
Antworten:
Einige Ad-hoc-Codes für Python 2.7:
Dies hängt von
str.format()
der Formatspezifikation Mini-Language ab .quelle
Zu diesem Zweck gibt es einige leichte und nützliche Python-Pakete:
1. tabellieren : https://pypi.python.org/pypi/tabulate
tabulate bietet viele Optionen zum Festlegen von Kopfzeilen und Tabellenformaten.
2. PrettyTable : https://pypi.python.org/pypi/PrettyTable
PrettyTable bietet Optionen zum Lesen von Daten aus der CSV-, HTML- und SQL-Datenbank. Sie können auch eine Teilmenge von Daten auswählen, Tabellen sortieren und Tabellenstile ändern.
3. Texttabelle : https://pypi.python.org/pypi/texttable
Mit der Texttabelle können Sie die horizontale / vertikale Ausrichtung, den Rahmenstil und die Datentypen steuern.
4. Termtabellen : https://github.com/nschloe/termtables
Mit der Texttabelle können Sie die horizontale / vertikale Ausrichtung, den Rahmenstil und die Datentypen steuern.
Andere Optionen:
quelle
coalign
Schlüsselwort für die Spaltenausrichtung wird in der offiziellen Pypi-Version nicht unterstützt. "tableprint" - Durchschnitt, API-Komplex, nicht genügend Beispiele für die allgemeine Verwendung.quelle
pip install numpy
Verwendet jetzt auf den meisten Plattformen binäre Räder (keine Kompilierung) . Offensichtlich waren bereits zuvor andere binäre Installationsoptionen verfügbar.Python macht das eigentlich ganz einfach.
Etwas wie
wird die Ausgabe haben
Das% in der Zeichenfolge ist im Wesentlichen ein Escape-Zeichen, und die darauf folgenden Zeichen geben Python an, welches Format die Daten haben sollen. Das% außerhalb und nach der Zeichenfolge teilt Python mit, dass Sie die vorherige Zeichenfolge als Formatzeichenfolge verwenden möchten und dass die folgenden Daten in das angegebene Format eingegeben werden sollen.
In diesem Fall habe ich zweimal "% -12i" verwendet. So zerlegen Sie jeden Teil:
Aus den Dokumenten: https://docs.python.org/2/library/stdtypes.html#string-formatting
quelle
print('%-20.2f' % position['deg'], '%-17.2f' % position['v2'])
die.2
Genauigkeit desf
Aktualisierung der Antwort von Sven Marnach auf Python 3.4:
quelle
Wenn ich das mache, möchte ich die Details der Formatierung der Tabelle steuern. Insbesondere möchte ich, dass Header-Zellen ein anderes Format als Body-Zellen haben und die Spaltenbreiten der Tabellen nur so breit sind, wie sie jeweils benötigt werden. Hier ist meine Lösung:
Hier ist die Ausgabe:
quelle
Ich denke das ist es, wonach Sie suchen.
Es ist ein einfaches Modul, das nur die maximal erforderliche Breite für die Tabelleneinträge berechnet und dann nur rjust und ljust verwendet , um einen hübschen Druck der Daten zu erstellen.
Wenn Sie möchten, dass Ihre linke Überschrift nach rechts ausgerichtet ist, ändern Sie einfach diesen Aufruf:
Ab Zeile 53 mit:
quelle
Ich weiß, dass ich zu spät zur Party komme, aber ich habe gerade eine Bibliothek dafür erstellt, von der ich denke, dass sie wirklich helfen könnte. Es ist sehr einfach, deshalb denke ich, dass Sie es verwenden sollten. Es heißt TableIT .
Grundlegende Verwendung
Befolgen Sie dazu zunächst die Download-Anweisungen auf der GitHub-Seite .
Dann importieren Sie es:
Erstellen Sie dann eine Liste mit Listen, wobei jede innere Liste eine Zeile ist:
Dann müssen Sie es nur noch ausdrucken:
Dies ist die Ausgabe, die Sie erhalten:
Feldnamen
Sie können Feldnamen verwenden, wenn Sie möchten ( wenn Sie keine Feldnamen verwenden, müssen Sie nicht useFieldNames = False sagen, da dies standardmäßig festgelegt ist ):
Daraus erhalten Sie:
Es gibt andere Verwendungszwecke, zum Beispiel könnten Sie dies tun:
Davon:
Oder Sie könnten tun:
Und daraus erhalten Sie:
Farben
Sie können auch Farben verwenden.
Sie verwenden Farben, indem Sie die Farboption ( standardmäßig auf Keine eingestellt ) verwenden und RGB-Werte angeben.
Verwenden Sie das Beispiel von oben:
Dann erhalten Sie:
Bitte beachten Sie, dass das Drucken von Farben möglicherweise nicht für Sie funktioniert, jedoch genauso wie die anderen Bibliotheken, die farbigen Text drucken. Ich habe getestet und jede einzelne Farbe funktioniert. Das Blau ist auch nicht durcheinander, wie es bei Verwendung der Standard-
34m
ANSI-Escape-Sequenz der Fall wäre (wenn Sie nicht wissen, was das ist, spielt es keine Rolle). Wie auch immer, alles kommt von der Tatsache, dass jede Farbe eher ein RGB-Wert als ein Systemstandard ist.Mehr Info
Weitere Informationen finden Sie auf der GitHub-Seite
quelle
Pure Python 3
Wird gedruckt
quelle
Eine einfache Möglichkeit, dies zu tun, besteht darin, alle Spalten zu durchlaufen, ihre Breite zu messen, eine row_template für diese maximale Breite zu erstellen und dann die Zeilen zu drucken. Es ist nicht genau das, wonach Sie suchen , denn in diesem Fall müssen Sie zuerst Ihre Überschriften in den Tisch legen, aber ich denke, es könnte für jemand anderen nützlich sein.
Sie verwenden es so:
quelle
Die folgende Funktion erstellt die angeforderte Tabelle (mit oder ohne Numpy) mit Python 3 (möglicherweise auch Python 2). Ich habe mich dafür entschieden, die Breite jeder Spalte so einzustellen, dass sie mit der des längsten Teamnamens übereinstimmt. Sie können es ändern, wenn Sie die Länge des Teamnamens für jede Spalte verwenden möchten, dies ist jedoch komplizierter.
Hinweis: Für eine direkte Entsprechung in Python 2 Sie die ersetzen könnten
zip
mitizip
von itertools.Dadurch wird die folgende Tabelle erstellt:
Wenn Sie vertikale Linie Separatoren haben wollen, können Sie ersetzen
" ".join
mit" | ".join
.Verweise:
quelle
Ich würde versuchen, die Liste zu durchlaufen und einen CSV-Formatierer zu verwenden, um die gewünschten Daten darzustellen.
Sie können Tabulatoren, Kommas oder andere Zeichen als Trennzeichen angeben.
Andernfalls durchlaufen Sie einfach die Liste und drucken nach jedem Element "\ t"
http://docs.python.org/library/csv.html
quelle
Ich fand dies nur auf der Suche nach einer Möglichkeit, einfache Spalten auszugeben. Wenn Sie nur unkomplizierte Spalten benötigen , können Sie Folgendes verwenden:
EDIT: Ich habe versucht, so einfach wie möglich zu sein, und dabei einige Dinge manuell erledigt, anstatt die Teamliste zu verwenden. Um auf die eigentliche Frage des OP zu verallgemeinern:
Ausgaben:
Dies scheint jedoch nicht mehr einfacher zu sein als die anderen Antworten, mit dem Vorteil, dass keine weiteren Importe erforderlich sind. Die Antwort von @ campkeith hat dies jedoch bereits erfüllt und ist robuster, da sie eine größere Vielfalt von Etikettenlängen verarbeiten kann.
quelle