4 Stimmen

Was ist der beste Weg, um eine Tabelle mit Trennzeichen in Python zu drucken

Ich möchte eine Tabelle mit gemischten String- und Float-Werten als tabulatorgetrennte Ausgabe ausdrucken. Sicher kann ich die Aufgabe erledigen:

>>> tab = [['a', 1], ['b', 2]]
>>> for row in tab:
...     out = ""
...     for col in row:
...             out = out + str(col) + "\t"
...     print out.rstrip()
... 
a   1
b   2

Aber ich habe das Gefühl, es gibt einen besseren Weg, um es in Python zu tun, zumindest um jede Zeile mit angegebenen Begrenzer, wenn nicht die ganze Tabelle zu drucken. Ein wenig googeln (von aquí ) und sie ist bereits kürzer:

>>> for row in tab:
...     print "\t".join([str(col) for col in row])
... 
a   1
b   2

Gibt es noch eine bessere, oder mehr Python, Weg, es zu tun?

17voto

Alexander Lebedev Punkte 5832

Die von Ihnen vorgeschlagene kürzere Lösung eignet sich gut als schnelle und schmutzige Lösung. Wenn Sie jedoch große Datenmengen verarbeiten müssen, wäre es besser, wenn Sie csv Modul:

import sys, csv
writer = csv.writer(sys.stdout, delimiter="\t")
writer.writerows(data)

Der Vorteil dieser Lösung ist, dass Sie alle Aspekte des Ausgabeformats leicht anpassen können: Trennzeichen, Anführungszeichen, Spaltenüberschriften, Escape-Sequenzen ...

4voto

David Z Punkte 121773

Ich glaube nicht, dass es viel besser wird als Ihr zweiter Codeschnipsel... vielleicht, wenn Sie wirklich wollen,

print "\n".join("\t".join(str(col) for col in row) for row in tab)

2voto

monowerker Punkte 2879
import sys
import csv

writer = csv.writer(sys.stdout, dialect=csv.excel_tab)
tab = [['a', 1], ['b', 2]]
writer.writerows(tab)

0voto

Сыч Punkte 923

Bitte verwenden Sie keine Konkatanation, da diese jedes Mal einen neuen String erzeugt. cStringIO.StringIO erledigt diese Aufgabe viel effizienter.

0voto

monkut Punkte 39059

Es hängt ab von warum ausgeben möchten, aber wenn Sie die Daten nur visuell referenzieren möchten, sollten Sie die Option pprint Modul.

>>> import pprint
>>> for item in tab:
...     pprint.pprint(item, indent=4, depth=2)
...
['a', 1]
['b', 2]
>>>
>>> pprint.pprint(tab, indent=4, width=1, depth=2)
[   [   'a',
        1],
    [   'b',
        2]]
>>>

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X