MySQL Java JavaScript PHP Python HTML-CSS C-sharp

Modulul locale

În formatul implicit al numerelor, Python folosește sistemul anglo-saxon, în care miile sunt separate prin virgule, iar partea zecimală este separată de partea întreagă prin punct. În Europa continentală, de exemplu, se folosește un alt sistem, în care miile sunt separate prin punct, iar partea zecimală de partea întreagă prin virgulă:

# sistemul anglo-saxon
1,234.567
# sistemul european
1.234,567

Pentru a rezolva problema formatării în funcție de o anumită cultură, Python include modulul integrat locale.

Pentru a seta cultura locală, în modulul locale este definită funcția setlocale(), care acceptă doi parametri:

setlocale(category, locale)

Primul parametru indică categoria la care se aplică funcția - pentru numere, valute sau pentru ambele. Ca valoare pentru acest parametru, putem transmite una dintre următoarele constante:

  • LC_ALL: aplică localizarea la toate categoriile - pentru formatul numerelor, valutelor, datelor etc
  • LC_NUMERIC: aplică localizarea pentru numere
  • LC_MONETARY: aplică localizarea pentru valute
  • LC_TIME: aplică localizarea pentru date și ore
  • LC_CTYPE: aplică localizarea la conversia caracterelor în majuscule sau minuscule
  • LC_COLLATE: aplică localizarea la compararea șirurilor de caractere

Al doilea parametru al funcției setlocale specifică cultura locală care trebuie utilizată. Pe sistemele Windows, se poate folosi codul țării conform standardului ISO din două caractere, de exemplu, pentru Statele Unite - "us", pentru Germania - "de", pentru România - "ro". Pe MacOS, trebuie specificat codul limbii și codul țării, de exemplu, pentru engleză în Statele Unite - "en_US", pentru germană în Germania - "de_DE", pentru română în România - "ro_RO". Implicit, se utilizează cultura "en_US".

Pentru formatul numerelor și valutelor, modulul locale oferă două funcții:

  • currency(num): formatează valuta
  • format_string(str, num): înlocuiește numărul num în șirul str

Se folosesc următorii placeholderi:

  • d: pentru numere întregi
  • f: pentru numere cu virgulă mobilă
  • e: pentru scrierea exponențială a numerelor

Înaintea fiecărui placeholder se pune semnul procent %, de exemplu:

"%d"

La afișarea numerelor zecimale, după punct, înainte de placeholder, se poate specifica câte zecimale să fie afișate:

%.2f        # două zecimale

Să aplicăm localizarea pentru numere și valute în cultura germană:

import locale

locale.setlocale(locale.LC_ALL, "de")        # pentru Windows
# locale.setlocale(locale.LC_ALL, "de_DE")   # pentru MacOS

number = 12345.6789
formatted = locale.format_string("%f", number)
print(formatted)    # 12345,678900

formatted = locale.format_string("%.2f", number)
print(formatted)    # 12345,68

formatted = locale.format_string("%d", number)
print(formatted)    # 12345

formatted = locale.format_string("%e", number)
print(formatted)    # 1,234568e+04

money = 234.678
formatted = locale.currency(money)
print(formatted)    # 234,68 €

Dacă, în loc de un cod specific, al doilea parametru este un șir gol, Python va folosi cultura care este utilizată pe mașina curentă. Cu ajutorul funcției getlocale() se poate obține această cultură:

import locale

locale.setlocale(locale.LC_ALL, "")

number = 12345.6789
formatted = locale.format_string("%.02f", number)
print(formatted)    # 12345,68
print(locale.getlocale())  
# ('Romanian_Romania', '1251') - Windows
# ('ro_RO', 'UTF-8')  - MacOS

Este important de menționat că, în funcție de sistem, rezultatul afișat poate diferi.

← Lecția anterioară Lecția următoare →