2009-08-31 16 views

Odpowiedz

18

Jeśli znasz maksymalne długości danych w dwóch kolumnach, możesz użyć kwalifikatorów formatu. Na przykład jeśli nazwa jest długa co najwyżej 20 znaków, a cena będzie pasował do 10 znaków, można zrobić

print "Name: %-20s Price: %10d" % (i.name, i.price) 

To jest lepsze niż przy użyciu kart jako zakładki nie będą wyrównane w pewnych okolicznościach (np jeśli jeden nazwa jest nieco dłuższa niż inna).

Jeśli niektóre nazwy nie mieszczą się w przestrzeni używanej, można użyć kwalifikatora formatu . do obcięcia danych. Na przykład użycie "% -20.20s" dla formatu nazwy spowoduje obcięcie dłuższych nazw w celu dopasowania do kolumny zawierającej 20 znaków.

+0

Doskonały. Kolejne przypomnienie dla mnie funkcji, której rzadko używam w pythonie. Sam miałem ten problem wcześniej i naprawiłem go za pomocą zakładek. Teraz mogę wrócić i ułatwić czytanie mojego kodu. –

9

Jak powiedział Vinay, używaj specyfikatorów formatu string.

Jeśli nie znać maksymalne długości, można je znaleźć poprzez dodatkowy przebieg listę:

maxn, maxp = 0, 0 
for item in items: 
    maxn = max(maxn, len(item.name)) 
    maxp = max(maxp, len(str(item.price))) 

następnie użyć '*' zamiast numeru oraz zapewnienie obliczoną szerokość jako argument.

for item in items: 
    print "Name: %-*s Price: %*d" % (maxn, item.name, maxp, item.price) 
0

Można również użyć metod rjust()/ljust() dla obiektów str.

Powiązane problemy