Aliniere incorectă a coloanelor la imprimarea tabelului în Python folosind caractere de tabulare (Programare, Python)

Bill a intrebat.

Vreau să tipăresc un tabel cu câteva etichete în partea de sus. Când etichetele au o lungime scurtă, totul este în regulă; dar când etichetele sunt lungi, coloanele nu se potrivesc!

Folosesc caractere de tabulare pentru a face spațiu. Iată codul:

table = """
tX CoordinatetY CoordinatetResult
t00t00t00
t00t00t00
t00t00t00
"""
print(table)

Ieșire:

X Coordinate    Y Coordinate    Result
00      00      00
00      00      00
00      00      00

După cum puteți vedea, Y Coordinate a fost împins în afară de X Coordinate! Cum fac să se potrivească!

Comentarii

  • print nu verifică numărul de caractere din șir și, prin urmare, nu le va alinia. –  > Por Fourier.
  • Tabulatoarele se aliniază la opririle de tabulare predefinite (de obicei, 1 plus fiecare al 8-lea caracter). Dacă textul scris este mai lung și depășește următoarea (următoarele) tabulație(e), o tabulație următoare se va alinia la următoarea tabulație înainte, fără a ține cont de cât de departe în linie se află deja cursorul. Tabulațiile s-au comportat întotdeauna în acest mod. –  > Por tonypdmtr.
4 răspunsuri
Fourier

O soluție posibilă este să te bazezi pe un pachet care a fost conceput în acest scop, cum ar fi tabulate: Citiți mai multe despre el!

Rețineți că trebuie să îl instalați folosind, de exemplu, pachetul pip install tabulate

from tabulate import tabulate

print tabulate([[00, 00, 00], [00, 00, 00], [00, 00, 00]], headers=['X Coordinate','Y Coordinate','Result'], tablefmt='orgtbl')

Sau folosiți tabelul dvs. original cu acest cod:

alignment = len(max(table.split("t")))+1
    
for line in table.strip().split("
"):
    row ="{{:>{}}}".format(alignment) * len(line.strip().split("t"))
    print row.format(*line.strip().split("t"))

Waket Zheng

Nu folosiți t pentru aliniere decât dacă șirurile au aceeași lungime.

Python 3.6.4 (default, Jan 03 2018, 13:52:55) [GCC]
Type 'copyright', 'credits' or 'license' for more information
IPython 6.4.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: table = """
   ...: tX CoordinatetY CoordinatetResult
   ...: t00t00t00
   ...: t00t00t00
   ...: t00t00t00
   ...: """

In [9]: def reformat(s):
   ...:     ss = s.strip().split('
')
   ...:     tb = [i.strip().split('t') for i in ss]
   ...:     length = max(max(len(w) for w in words) for words in tb) + 4
   ...:     return '
'.join(''.join(f'{w:{length}}' for w in words) for words in tb)
   ...: 
   ...: 

In [10]: print(reformat(table))
X Coordinate    Y Coordinate    Result          
00              00              00              
00              00              00              
00              00              00  

Engineero

Aceasta este o resursă excelentă pentru formatarea șirurilor Python în general. Folosind .format abordare, ați putea folosi padding pentru a alinia toate șirurile cu:

header = ['X Coordinate', 'Y Coordinate', 'Result']
row = ['00', '00', '00']
rows = [header, row, row, row]
print('
'.join([''.join(['{:16}'.format(x) for x in r]) for r in rows]))
#X Coordinate    Y Coordinate    Result          
#00              00              00              
#00              00              00              
#00              00              00

Sau, folosind f-strings:

print('
'.join([''.join([f'{x:16}' for x in r]) for r in rows]))

De asemenea, puteți alinia la dreapta cu (rețineți că ':>16' în șirul de format):

print('
'.join([''.join([f'{x:>16}' for x in r]) for r in rows]))
#    X Coordinate    Y Coordinate          Result
#              00              00              00
#              00              00              00
#              00              00              00

Deci, în principiu, puneți datele într-o listă de liste și apoi decideți lățimea dorită a rândului și puteți utiliza linia unică de mai sus pentru a imprima lucrurile frumos.

Damian

O altă metodă este utilizarea tabulării.

Mai întâi trebuie să o importați. Căutați pe internet cum se face. dacă folosiți Spyder, cum fac eu, atunci în fereastra de comandă pentru Anaconda, tastați doar:conda install -c conda-forge tabulate

Acest lucru este foarte util!

table = [["X Coordinate", "Y Coordinate", "Result"], [00, 00, 00], [00, 00, 00], [00, 00, 00]]
print(tabulate(table))

Acest lucru va da acest rezultat:

------------  ------------  ------
X Coordinate  Y Coordinate  Result
0             0             0
0             0             0
0             0             0
------------  ------------  ------

OR!!!!!

Puteți face acest lucru:

table = [[00, 00, 00], [00, 00, 00], [00, 00, 00]]
print(tabulate(table, headers=["X Coordinate", "Y Coordinate", "Result"]))

Care va da acest rezultat:

  X Coordinate    Y Coordinate    Result
--------------  --------------  --------
             0               0         0
             0               0         0
             0               0         0

DACĂ… nu vă plac liniuțele, puteți folosi acest lucru:

print(tabulate(table, tablefmt="plain"))

Și acest lucru va da:

X Coordinate  Y Coordinate  Result
0             0             0
0             0             0
0             0             0

Sper că vă ajută! 🙂

Tags: