Formatare
În temele anterioare, a fost discutat cum se pot introduce anumite valori într-un șir de caractere, precedând șirul cu simbolul f:
first_name="Tom"
text = f"Hello, {first_name}."
print(text) # Hello, Tom.
name="Bob"
age=23
info = f"Name: {name}\t Age: {age}"
print(info) # Name: Bob Age: 23
De asemenea, în Python există o metodă alternativă care oferă metoda format(). Această metodă permite formatarea unui șir de caractere, inserând în acesta valori în locul unor marcaje speciale.
Pentru inserarea valorilor într-un șir, se folosesc parametri speciali, care sunt cuprinși între acolade ({}).
Parametrii denumiți
În șirul formatat putem defini parametri, iar în metoda format() putem transmite valori pentru acești parametri:
text = "Hello, {first_name}.".format(first_name="Tom")
print(text) # Hello, Tom.
info = "Name: {name}\t Age: {age}".format(name="Bob", age=23)
print(info) # Name: Bob Age: 23
Parametrii se definesc în metoda format cu același nume ca și în șirul de caractere. Astfel, dacă parametrul se numește first_name, ca în primul caz, atunci și argumentul căruia i se atribuie valoarea trebuie să se numească first_name.
Parametrii după poziție
Putem de asemenea transmite în metoda format un set de argumente în ordine, iar în șirul de caractere formatat să introducem acești parametri, specificând în acolade numărul lor (numerotarea începe de la zero):
info = "Name: {0}\t Age: {1}".format("Bob", 23)
print(info) # Name: Bob Age: 23
Argumentele pot fi inserate în șir de mai multe ori:
text = "Hello, {0} {0} {0}.".format("Tom")
Substituții
O altă metodă de a transmite valori formatate în șir este utilizarea substituțiilor sau a unor marcaje speciale, în locul cărora se inserează anumite valori. Pentru formatare putem folosi următoarele marcaje:
- s: pentru inserarea șirurilor de caractere
- d: pentru inserarea numerelor întregi
- f: pentru inserarea numerelor zecimale. Pentru acest tip, de asemenea, se poate specifica prin punct câte cifre din partea zecimală să fie afișate
- %: înmulțește valoarea cu 100 și adaugă semnul procentului
- e: afișează numărul în notație exponențială
Sintaxa generală a marcajului este următoarea:
{:marcaj}
În funcție de marcaj, se pot adăuga parametri suplimentari. De exemplu, pentru formatarea numerelor float, se pot utiliza următorii parametri:
{:[număr_simboluri][virgulă][.număr_zecimale] marcaj}
La apelarea metodei format, se transmit ca argumente valorile care vor fi introduse în locul marcajelor:
welcome = "Hello {:s}"
name = "Tom"
formatted_welcome = welcome.format(name)
print(formatted_welcome) # Hello Tom
Metoda format() returnează un șir nou formatat.
Formatarea numerelor întregi:
source = "{:d} simboluri"
number = 5
target = source.format(number)
print(target) # 5 simboluri
Dacă numărul formatat este mai mare de 999, putem specifica în definirea marcajului că dorim să folosim virgula ca separator pentru mii:
source = "{:,d} simboluri"
print(source.format(5000)) # 5,000 simboluri
Marcajele pot fi utilizate și în șirurile de tip f:
n = 5000
source = f"{n:,d} simboluri"
print(source) # 5,000 simboluri
Pentru numerele zecimale, adică cele de tip float, după punctul din marcaj se poate specifica câte cifre din partea zecimală dorim să fie afișate:
number = 23.8589578
print("{:.2f}".format(number)) # 23.86
print("{:.3f}".format(number)) # 23.859
print("{:.4f}".format(number)) # 23.8590
print("{:,.2f}".format(10001.23554)) # 10,001.24
Un alt parametru permite setarea lățimii minime a valorii formatate în caractere:
print("{:10.2f}".format(23.8589578)) # 23.86
print("{:8d}".format(25)) # 25
Exemplu similar cu șiruri de tip f:
n1 = 23.8589578
print(f"{n1:10.2f}") # 23.86
n2 = 25
print(f"{n2:8d}") # 25
Pentru afișarea procentelor, este mai bine să folosiți codul "%":
number = .12345
print("{:%}".format(number)) # 12.345000%
print("{:.0%}".format(number)) # 12%
print("{:.1%}".format(number)) # 12.3%
print(f"{number:%}") # 12.345000%
print(f"{number:.0%}") # 12%
print(f"{number:.1%}") # 12.3%
Pentru afișarea unui număr în notație exponențială, se folosește marcajul "e":
number = 12345.6789
print("{:e}".format(number)) # 1.234568e+04
print("{:.0e}".format(number)) # 1e+04
print("{:.1e}".format(number)) # 1.2e+04
print(f"{number:e}") # 1.234568e+04
print(f"{number:.0e}") # 1e+04
print(f"{number:.1e}") # 1.2e+04
Formatare fără metoda format
Există și o altă metodă de formatare folosind următoarea sintaxă:
șir%(parametru1, parametru2,..parametruN)
În acest caz, șirul conține aceleași marcaje discutate anterior (cu excepția marcajului %), după șir se pune semnul procentului %, iar apoi lista de valori care se inserează în șir. De fapt, semnul procentului reprezintă o operație, în urma căreia se obține un nou șir:
info = "Nume: %s \t Vârstă: %d" % ("Tom", 35)
print(info) # Nume: Tom Vârstă: 35
În dreptul marcajului se specifică semnul procentului și, spre deosebire de funcția format, aici nu sunt necesare acolade.
Metodele de formatare a numerelor pot fi aplicate și aici:
number = 23.8589578
print("%0.2f - %e" % (number, number)) # 23.86 - 2.385896e+01
Setarea lungimii șirului
Cu ajutorul simbolurilor speciale, se poate seta lungimea șirului la formatare:
- <N: aliniază șirul la stânga și completează cu spații din dreapta până la lungimea N
- >N: aliniază șirul la dreapta și completează cu spații din stânga până la lungimea N
- ^N: aliniază șirul la centru și completează cu spații din stânga și dreapta până la lungimea N
- .N: setează lungimea exactă a șirului. Dacă acesta conține mai mult de N caractere, atunci este trunchiat
De exemplu:
str = "Hello World"
print(f"{str:>16}!")
print(f"{str:<16}!")
print(f"{str:^16}!")
print(f"{str:.16}!")
print(f"{str:.5}!")
Rezultatul:
Hello World!
Hello World !
Hello World !
Hello World!
Hello!