Hallo snafu,
Dein letzter Post, ist ja eine kleine Weile her, möchte aber wenn möglich, nochmals daran anknüpfen.
snafu hat geschrieben:Hab jetzt einfach mal die komplette Formatierungs-Funktionalität geschrieben. Aufgrund der speziellen Anforderungen, die du an die Ausgabe stellst, sind es doch ein paar Zeilen mehr geworden. Manches kann man vermutlich noch besser machen, aber ich hoffe trotzdem, den Quelltext etwas verständlicher für die Allgemeinheit hinbekommen zu haben:
https://gist.github.com/3527463
Wie du siehst, habe ich den Info-Text bei den Testdatensätzen stark gekürzt, damit das schon von dir genannte Problem der Überlänge nicht auftritt. Wobei man auch hier sein Terminal-Fenster im Vollbildmodus laufen lassen sollte.
Eine Implementierung mit passendem Zeilenumbruch kommt dann in der nächsten Maus (irgendwann).

Deine Funktion, funktioniert wirklich prima. Einziger Wermutstropfen, sind überlange Zeilen, die dann das Layout sprengen.
Habe Deine Funktion als Modul laufen, damit ich von verschiedenen Modulen aus, darauf zugreifen kann.
Habe den Code für die neue Anforderung etwas erweitert, bin allerdings noch am Rätseln, wie ich das umsetzen kann, bei überlangen Zeilen, einen Zeilenumbruch innerhalb der jeweiligen Spalte zu erzeugen.
Code: Alles auswählen
def window_size():
# Fenstergröße des Terminals/Konsole ermitteln.
# Ausgabe: Zeilen, Zeichen
rows, columns = os.popen('stty size', 'r').read().split()
return rows, columns
def get_formatted_table(menupoint, HEADINGS, contents, spacing=4,
numeration_width=10):
rows, columns = window_size()
lines = [HEADINGS] + contents
column_widths = [max(len(item) for item in column_items)
for column_items in zip(*lines)]
total_width = sum(column_widths) + (len(column_widths) - 1) * spacing
total_width += numeration_width
if total_width > int(columns):
print('Layoutfehler, die Ausgabezeile ist um %s Zeichen größer, \
\nals die Breite des Terminals/Konsole!' %
(total_width - int(columns)))
dashed_line = total_width * '-'
blank_line = total_width * ' '
numeration_spec = '{{:>{}}}'.format(numeration_width)
column_specs = ['{{:{}}}'.format(width) for width in column_widths]
line_template = numeration_spec + (spacing * ' ').join(column_specs)
headline = line_template.format('Nummer: ', *HEADINGS)
head_items = [dashed_line, headline, blank_line, dashed_line]
formatted_lines = head_items[:]
dataline = dict()
for line_number, text_items in enumerate(contents, 1):
needs_headings = (line_number % MAX_LINES_PER_SEGMENT == 0)
dataline[line_number] = [text_items]
if needs_headings:
formatted_lines.extend(head_items)
numeration_string = '{}: '.format(line_number)
formatted_lines.append(line_template.format(numeration_string,
*text_items))
formatted_lines.append(blank_line)
formatted_lines.append(dashed_line)
print('\n'.join(formatted_lines))
return menupoint, dataline