Formattering med str.format()

Man kan med hjälp av str.format() formatera strängar.

  • %d används i samband med heltal, där d står för digit. Se exemplet nedan:
    a = 5711
    print( "START{0:<9d}SLUT".format( a ) )
    skriver ut: START5711␣␣␣␣SLUT
    medan 
    print("START{0:>10d}SLUT".format(a))
    skriver ut: START␣␣␣␣␣5711SLUT

    Alltså det ska skrivas ut minst 9 tecken. Om antal tecken i talet är mindre än 9 då ska resterande fyllas med mellanrum (␣) för att uppnå 9 tecken. I detta fall 5 mellanrum då talet endast består av 4 tecken. < och > talar om  ␣ ska vara före 5711 eller efter. talet 0 i {0:<9d} syftar på första argument i parameterlistan för format. t.ex om vi har följande kod :
    a = 5711
    b = 3243
    print( "START{1:<9d}SLUT".format(a, b) )
    då skrivs ut: START3243␣␣␣␣SLUT
    eftersom att 1 i {1:<9d} syftar på argument med index 1 d.v.s. b och alltså inte a som har index 0 i argumentlistan..
  • %f används i samband med decimaltal, där f står för float. Se exemplet nedan:
    a = 4711.589
    print("START{0:<9.1f}SLUT".format(a))
    programmet skriver ut: START4711.6SLUT

    Alltså minst ska det vara 9 tecken mellan "START" och "SLUT". Talet 1 i {0:<9.1f}  avrundar decimaltalet med 1 decmal, alltså 4711.589 avrundas till 4711.6, vilket består av 6 tecken. Alltså resterande 3 (9-6=3) ska fyllas upp med mellanrum (␣).

  • %s används i samband med strängar, där s står för string. Se exemplet nedan:
    a = "blahonga"
    print("START{0:<11.4s}SLUT".format(a))
    programmet skriver ut: STARTblah␣SLUT
    Talet 4 i {0:<11.4s} bestämmer antal tecken från strängen som ska skrivas ut, alltså 4 tecknen "blah" i detta fall. Talet 11 i {0:<11.4s} bestämmer totala antal tecken som ska skrivas ut, varav 7 mellanrum (␣). 

Man kan också kombinera %s, %f och %d i en enda sats.

a = 77
b = 45.112345
c = "två tal och en strang"
print("{2:<11.6s}{0:<d}{1:<6.2f}***".format(a,b,c))

Vilket skriver ut:

två ta␣␣␣␣␣7745.11***

 

Vad har tecknet "<" för betydelse?

Tecknet "<" talar om att det som ska formatteras ska hamna på vänstra sidan och om det hade stått ">" det skulle innebära att det som ska formatteras ska hamna på högra sidan:

  Vi såg att:

a = "blahonga"
print("START{0:<11.4s}SLUT".format(a))
skriver ut: STARTblah␣␣␣␣␣␣␣SLUT

Om vi nu byter "<" till ">"  enligt nedan då får vi följande:

a = "blahonga"
print("START{0:>11.4s}SLUT".format(a))
skriver ut: STARTblahSLUT