Python-da ədədi və ya sətri müxtəlif formatlara çevirmək (formatlaşdırmaq) üçün daxili funksiya formatı() və ya str.format() metodundan istifadə edin.
Bu bölmədə biz aşağıdakı funksiyalardan necə istifadə edəcəyimizi izah edəcəyik.
- daxili funksiya (məsələn, proqramlaşdırma dilində)
format()
- sim üsulu
str.format()
Bundan əlavə, aşağıdakı formata çevirmək üçün format spesifikasiyası sətri nümunə kodu ilə izah olunur.
- Sola əsaslandırılmış, Mərkəzə əsaslandırılmış, Sağa əsaslandırılmış
- sıfır doldurma
- İşarə (artı və ya mənfi)
- Rəqəm ayırıcı (vergül, alt xətt)
- İkilik, səkkizlik və onaltılıq ədədlər
- Onluq nöqtəsindən sonra rəqəmlərin sayını göstərin
- Əhəmiyyətli rəqəmlər (əhəmiyyətli rəqəmlərin sayı)
- eksponensial qeyd
- Faiz göstəricisi
Qeyd edək ki, Python 3.6-dan bəri str.format() sətir metoduna daha yığcam olması üçün f-sətirləri (f-sətirləri) əlavə edilmişdir.
- Daxili funksiya: format()
- String metodu str.format()
- Sola əsaslandırılmış, Mərkəzə əsaslandırılmış, Sağa əsaslandırılmış
- 0 doldurun
- İşarə (artı və ya mənfi)
- Rəqəm ayırıcı (vergül, alt xətt)
- İkilik, səkkizlik və onaltılıq ədədlər
- Onluq nöqtəsindən sonra rəqəmlərin sayını göstərin
- eksponensial qeyd
- Əhəmiyyətli rəqəmlər (əhəmiyyətli rəqəmlərin sayı)
- Faiz göstəricisi
Daxili funksiya: format()
format() standart Python daxili funksiyası kimi təqdim olunur.
Kontur aşağıdakı kimidir.
format(value, format_spec)
- Birinci arqument: the
value
Orijinal dəyər. String str, number int, float və s. - İkinci arqument
format_spec
Format spesifikasiyası sətri. String küç - Qaytarılan dəyər: formatlanmış sətir str
- Birinci arqument: the
Nümunələr aşağıda göstərilmişdir. Format sətirlərinin növləri və onların necə yazılması daha sonra təsvir edilir.
Bu misalda biz ilk arqument kimi ədədi hərflərdən və sətir literallarından istifadə etdik, lakin təbii ki, siz bu dəyərləri ehtiva edən dəyişənlərdən istifadə edə bilərsiniz.
s = format(255, '04x')
print(s)
print(type(s))
# 00ff
# <class 'str'>
print(format('center', '*^16'))
# *****center*****
String metodu str.format()
Sətir str növü üçün format() metodu da var.
Format() metodunu çağıran str sətirindəki {} əvəzetmə sahəsi adlanır və format() metodunun arqumenti ilə əvəz olunur.
Format spesifikasiyası sətri əvəzetmə sahəsində {} və sonra “:” ilə yazılmalıdır.
Qaytarılan dəyər formatlanmış sətirdir.
Yuxarıda təsvir edilən daxili funksiya formatına() ekvivalent proses aşağıdakı kimidir.
s = '{:04x}'.format(255)
print(s)
print(type(s))
# 00ff
# <class 'str'>
print('{:*^16}'.format('center'))
# *****center*****
Yenə də biz arqumentlər kimi ədədi hərflərdən və sətir literallarından istifadə edirik, lakin təbii ki, dəyişənlər də məqbuldur.
Əvəzetmə sahələri üçün arqumentlərin təyin edilməsi
Arqumentləri sıra ilə göstərin (defolt)
Çoxsaylı əvəzetmə sahələri {} ola bilər və defolt olaraq metod arqumentləri ardıcıllıqla işlənir. {} formatında spesifikasiya sətri buraxılıbsa, o, sadəcə olaraq str() ilə sətirə çevriləcək.
Dəyişən dəyərləri sətirə daxil etmək və onları çap etmək üçün faydalıdır.
print('{}-{}-{}'.format('100', '二百', 300))
# 100-二百-300
Tam ədədlər üçün mövqe arqumentini təyin edin
{0} və ya {1} kimi {}-də tam dəyər göstərilibsə, çıxış arqumentlərin sırasından asılı olacaq. Eyni nömrə təkrar istifadə edilə bilər. Bu, eyni dəyəri sətirə daxil etmək istədiyiniz zaman faydalıdır.
print('{0}-{1}-{0}'.format('foo', 'bar'))
# foo-bar-foo
İxtiyari adlar (sətirlər) üçün açar söz arqumentlərini təyin edin
Siz həmçinin {}-də istənilən adı göstərə və onu açar söz arqumenti kimi daxil edə bilərsiniz.
print('{day}/{month}/{year}/'.format(day=11, month=1, year=2018))
# 11/1/2018
Siyahı və ya lüğəti arqument kimi göstərin
Siyahılar və lüğətlər arqument kimi göstərilə bilər.
Əvəzetmə sahəsində siyahının indeksini və ya lüğətin açarını təyin etmək üçün [] istifadə edin. Qeyd edək ki, “‘” və “” dırnaq işarələri lüğət açarlarını təyin etmək üçün istifadə edilmir.
Eyni arqumentdən təkrar istifadə etmək istəyirsinizsə, yuxarıda təsvir olunduğu kimi tam dəyər və ya sətir (ad) təyin etməlisiniz.
l = ['one', 'two', 'three']
print('{0[0]}-{0[1]}-{0[2]}'.format(l))
# one-two-three
d1 = {'name': 'Alice', 'age': 20}
d2 = {'name': 'Bob', 'age': 30}
print('{0[name]} is {0[age]} years old.\n{1[name]} is {1[age]} years old.'.format(d1, d2))
# Alice is 20 years old.
# Bob is 30 years old.
Siyahıya * əlavə edərək onu arqument kimi göstərərək mövqeli arqument kimi və ya lüğətə ** əlavə edib arqument kimi göstərməklə açar söz arqumenti kimi genişləndirmək olar.
l = ['one', 'two', 'three']
print('{}-{}-{}'.format(*l))
# one-two-three
d = {'name': 'Alice', 'age': 20}
print('{name} is {age} years old.'.format(**d))
# Alice is 20 years old.
Buruq mötərizələrin təsviri {}
Format() metodunda qıvrımlı mötərizələri {,} yazmaq istəyirsinizsə, bunu {{,}} kimi iki dəfə təkrarlayın. Nəzərə alın ki, əks xətlərdən qaçmaq mümkün deyil.
print('{{}}-{num}-{{{num}}}'.format(num=100))
# {}-100-{100}
formatlanmış sətir
Hər iki halda formatı təyin etmək üçün {}-də tam dəyər və ya ad sətirindən sonra “:format sətri” yazın.
print('{num:x}'.format(num=255))
# ff
print('{day}/{month:02}/{year:02}/'.format(day=11, month=1, year=2018))
# 11/01/2018
Aşağıda format sətirindən istifadə edərək formatı necə təyin edəcəyimizi izah edəcəyik. Nümunə kodu str.format() metodundan istifadə edir, lakin eyni formatlı sətir daxili funksiya formatı () ilə istifadə edilə bilər. Daxili funksiya formatında() format spesifikasiyası sətri ikinci arqument kimi müəyyən edilir.
Sola əsaslandırılmış, Mərkəzə əsaslandırılmış, Sağa əsaslandırılmış
Aşağıda sola əsaslandırılmış, mərkəzə əsaslanmış, sağa əsaslanmış və s.-ni uyğunlaşdıra bilərsiniz. Simvolların ümumi sayını rəqəm kimi göstərin.
<
^
>
print('left : {:<10}'.format(100))
print('center: {:^10}'.format(100))
print('right : {:>10}'.format(100))
# left : 100
# center: 100
# right : 100
Siz həmçinin doldurulacaq simvolu təyin edə bilərsiniz. Əgər buraxılmışsa, yuxarıdakı misalda olduğu kimi, o, boşluqdur.
Tək simvol olduğu müddətcə iki baytlıq simvollardan istifadə edə bilərsiniz.
print('left : {:*<10}'.format(100))
print('center: {:a^10}'.format(100))
print('right : {:鬼>10}'.format(100))
# left : 100*******
# center: aaa100aaaa
# right : 鬼鬼鬼鬼鬼鬼鬼100
> ilə sağa əsaslandırma; (-,+) işarəsini nəzərə almır. Əgər = istifadə etsəniz, işarədən sonra müəyyən edilmiş simvol gəlir. + təyin etmək istəyirsinizsə, = sonra + yazın. İşarənin işlənməsinin təfərrüatları daha sonra təsvir olunacaq.
print('sign: {:0>10}'.format(-100))
print('sign: {:0=10}'.format(-100))
print('sign: {:0=+10}'.format(100))
# sign: 000000-100
# sign: -000000100
# sign: +000000100
<, ^ və > sətirlər üçün təyin oluna bilər, lakin = ValueError xətası ilə nəticələnəcək. Əgər sətir üçün = istifadə etmək istəyirsinizsə, onu int() istifadə edərək rəqəmə çevirməlisiniz.
# print('sign: {:0=10}'.format('-100'))
# ValueError: '=' alignment not allowed in string format specifier
print('sign: {:0=10}'.format(int('-100')))
# sign: -000000100
Eyni şey üzən nöqtəli nömrələrə də aiddir. Ondalıq xallar da simvol kimi sayılır.
print('left : {:*<10}'.format(1.23))
print('center: {:a^10}'.format(1.23))
print('right : {:鬼>10}'.format(1.23))
# left : 1.23******
# center: aaa1.23aaa
# right : 鬼鬼鬼鬼鬼鬼1.23
print('sign: {:0>10}'.format(-1.23))
print('sign: {:0=10}'.format(-1.23))
print('sign: {:0=+10}'.format(1.23))
# sign: 00000-1.23
# sign: -000001.23
# sign: +000001.23
Siyahılar, dəstlər və s. olduğu kimi göstərildiyi təqdirdə xətaya səbəb olacaq və str() istifadə edərək sətirlərə çevrilə bilər.
l = [0, 1]
print(type(l))
# <class 'list'>
# print('{:*^16}'.format(l))
# TypeError: unsupported format string passed to list.__format__
print(type(str(l)))
# <class 'str'>
print('{:*^16}'.format(str(l)))
# *****[0, 1]*****
Sola əsaslandırılmış, mərkəzə əsaslandırılmış və sağa əsaslandırılmış üçün ljust(), center() və rjust() adlı xüsusi sətir metodları da mövcuddur.
0 doldurun
Rəqəmlərin sayını sıfır doldurmaqla tənzimləmək istəyirsinizsə, doldurulacaq simvolu 0-a təyin edin və onu sağa doğru əsaslandırın.
Sıfır doldurulma vəziyyətində, düzləşdirmə simvolu buraxılıbsa, = göstərildiyi kimi işlənir.
print('zero padding: {:0=10}'.format(100))
print('zero padding: {:010}'.format(100))
# zero padding: 0000000100
# zero padding: 0000000100
print('zero padding: {:0=10}'.format(-100))
print('zero padding: {:010}'.format(-100))
# zero padding: -000000100
# zero padding: -000000100
#ERROR!
# print('zero padding: {:010}'.format('-100'))
# ValueError: '=' alignment not allowed in string format specifier
Sıfır doldurma üçün zfill() adlı xüsusi sətir metodu da var.
İşarə (artı və ya mənfi)
Varsayılan olaraq, yalnız mənfi ədədlər işarə ilə qeyd olunur (minus-).
Formatlama spesifikasiyası sətirinə + əlavə edildikdə, müsbət ədədlər üçün də işarə (plus +) göstərilir. Boşluq əlavə olunarsa, müsbət ədədin əvvəlində boşluq göstərilir və rəqəmlərin sayı mənfi ədədə uyğunlaşdırılır.
print('sign: {}'.format(100))
print('sign: {}'.format(-100))
# sign: 100
# sign: -100
print('sign: {:+}'.format(100))
print('sign: {:+}'.format(-100))
# sign: +100
# sign: -100
print('sign: {: }'.format(100))
print('sign: {: }'.format(-100))
# sign: 100
# sign: -100
Yuxarıda qeyd olunan sıfır doldurma kimi ixtiyari simvollarla doldurarkən diqqətli olun. Defolt, + və boşluq olmadan müsbət ədədləri daha bir simvolla doldurur.
print('sign: {:06}'.format(100))
print('sign: {:06}'.format(-100))
# sign: 000100
# sign: -00100
print('sign: {:+06}'.format(100))
print('sign: {:+06}'.format(-100))
# sign: +00100
# sign: -00100
print('sign: {: 06}'.format(100))
print('sign: {: 06}'.format(-100))
# sign: 00100
# sign: -00100
Hizalanma simvolundan istifadə edilərsə, işarə təyini simvolu düzləşdirmə simvolundan sonra yazılmalıdır.
print('sign: {:_>6}'.format(100))
print('sign: {:_>6}'.format(-100))
# sign: ___100
# sign: __-100
print('sign: {:_>+6}'.format(100))
print('sign: {:_>+6}'.format(-100))
# sign: __+100
# sign: __-100
print('sign: {:_> 6}'.format(100))
print('sign: {:_> 6}'.format(-100))
# sign: __ 100
# sign: __-100
Rəqəm ayırıcı (vergül, alt xətt)
Hər üç rəqəmə vergül və ya alt xətt _ ayırıcı əlavə edin. Bu, böyük rəqəmləri oxumağı asanlaşdırır. Qeyd edək ki, alt xətt_ Python 3.6-da əlavə edilmiş seçimdir, ona görə də əvvəlki versiyalarda istifadə edilə bilməz.
print('{:,}'.format(100000000))
# 100,000,000
print('{:_}'.format(100000000))
# 100_000_000
Üzən nöqtəli nömrəli float tiplərində yalnız tam hissə ayrılır.
print('{:,}'.format(1234.56789))
# 1,234.56789
İkilik, səkkizlik və onaltılıq ədədlər
Çıxış üçün ədədi dəyərləri ikilik, səkkizlik və onaltılıq ədədlərə çevirir.
b
: İkilio
: səkkizlikd
: Ondalıkx
,X
: Hexadecimal (böyük hərflər böyük hərflə yazılır)
print('bin: {:b}'.format(255))
print('oct: {:o}'.format(255))
print('dec: {:d}'.format(255))
print('hex: {:x}'.format(255))
print('HEX: {:X}'.format(255))
# bin: 11111111
# oct: 377
# dec: 255
# hex: ff
# HEX: FF
O, həmçinin 0-doldurma ilə birləşdirilə bilər və tez-tez ikili və onaltılıq notasiyada rəqəmləri uyğunlaşdırmaq üçün istifadə olunur.
print('bin: {:08b}'.format(255))
print('oct: {:08o}'.format(255))
print('dec: {:08d}'.format(255))
print('hex: {:08x}'.format(255))
print('HEX: {:08X}'.format(255))
# bin: 11111111
# oct: 00000377
# dec: 00000255
# hex: 000000ff
# HEX: 000000FF
Qeyd edək ki, sıfır doldurma simvollarının sayı prefiks nəzərə alınmaqla göstərilməlidir.
print('bin: {:#010b}'.format(255))
print('oct: {:#010o}'.format(255))
print('dec: {:#010d}'.format(255))
print('hex: {:#010x}'.format(255))
print('HEX: {:#010X}'.format(255))
# bin: 0b11111111
# oct: 0o00000377
# dec: 0000000255
# hex: 0x000000ff
# HEX: 0X000000FF
İkilik və onaltılıq ədədlər üçün yalnız alt xətt _ rəqəm ayırıcısı daxil edilə bilər (Python 3.6 və ya daha sonra). 4-rəqəmli separator istifadə olunur; sıfırla doldurulmuş simvolların sayı alt xəttlərin sayını da nəzərə almalıdır.
print('hex: {:08x}'.format(255))
print('hex: {:09_x}'.format(255))
print('hex: {:#011_x}'.format(255))
# hex: 000000ff
# hex: 0000_00ff
# hex: 0x0000_00ff
Yalnız tam tipli int formatı ikili və ya onaltılıq sistemə çevirə bilər. Onu rəqəmə çevirmək üçün int() istifadə edə bilərsiniz.
# print('hex: {:08x}'.format('255'))
# ValueError: Unknown format code 'X' for object of type 'str'
print('hex: {:08x}'.format(int('255')))
# hex: 000000ff
Onluq nöqtəsindən sonra rəqəmlərin sayını göstərin
Onluq nöqtəsindən sonra rəqəmlərin sayını təyin etmək üçün aşağıdakıları edin: n rəqəmlərin sayıdır. Onluq nöqtəsindən sonrakı rəqəmlərin sayı tam hissədəki rəqəmlərin sayından asılı olmayaraq göstərilən rəqəm sayına çevrilir..[n]f
print('{:.2f}'.format(123.456))
print('{:.5f}'.format(123.456))
print('{:.3f}'.format(0.0001234))
# 123.46
# 123.45600
# 0.000
Onluq nöqtənin sol tərəfi yuxarıda göstərildiyi kimi sola əsaslandırılmış, mərkəzə əsaslandırılmış, sağa əsaslandırılmış və ya sıfırla doldurulmuş kimi göstərilə bilər. Hədəf dəyərinin rəqəmlərinin sayı göstərilən rəqəmdən çox olarsa, heç bir şey edilmir. Hədəf dəyərindəki rəqəmlərin sayı göstərilən rəqəmlərdən çox olarsa, heç bir şey edilmir.
print('{:>12.5f}'.format(123.456))
print('{:012.5f}'.format(123.456))
print('{:06.5f}'.format(123.456))
# 123.45600
# 000123.45600
# 123.45600
Əgər onluq nöqtədən sonra rəqəmlərin orijinal sayından az rəqəmlər göstərsəniz, dəyər yuvarlaqlaşdırılacaq. Qeyd edək ki, bu, ən yaxın tam ədədə yuvarlaqlaşdırma deyil, cüt ədədə, məs. 0.5 0-a yuvarlaqlaşdırılır.
print('{:.0f}'.format(0.4))
print('{:.0f}'.format(0.5))
print('{:.0f}'.format(0.6))
# 0
# 0
# 1
Əgər ümumi yuvarlaqlaşdırmadan istifadə etmək istəyirsinizsə, standart kitabxananın ondalığı üçün quantize() metodundan istifadə edə bilərsiniz.
eksponensial qeyd
Üzən nöqtəli float nömrəsi str sətrinə çevrildikdə, rəqəmlərin sayından asılı olaraq avtomatik olaraq eksponensial notasiyada yazılacaq. Tam ədəd növü int yoxdur.
print('{}'.format(0.0001234))
print('{}'.format(0.00001234))
# 0.0001234
# 1.234e-05
print('{}'.format(1234000000000000.0))
print('{}'.format(12340000000000000.0))
print('{}'.format(12340000000000000000000000))
# 1234000000000000.0
# 1.234e+16
# 12340000000000000000000000
Formatlama spesifikasiyası sətirində e və ya E təyin etsəniz, həmişə eksponensial nota çevirə bilərsiniz. Çıxışda istifadə olunan simvollar müvafiq olaraq e və E olacaq.
print('{:e}'.format(0.0001234))
print('{:E}'.format(0.0001234))
# 1.234000e-04
# 1.234000E-04
Onluq nöqtəsindən sonra rəqəmlərin sayını təyin etmək də mümkündür. Tam hissə həmişə bir rəqəm olacaq və ondalık nöqtəsi göstərilən rəqəmlərin sayı olacaqdır.
print('{:.5e}'.format(0.0001234))
print('{:.2E}'.format(0.0001234))
# 1.23400e-04
# 1.23E-04
print('{:.5e}'.format(987.65))
print('{:.2E}'.format(987.65))
# 9.87650e+02
# 9.88E+02
Nəzərə alın ki, sola əsaslandırılmış, mərkəzə əsaslandırılmış, sağa əsaslandırılmış və ya sıfırla doldurulmuş qeyd etsəniz, e-, E+ və s. də rəqəmlər (simvollar) kimi hesablanacaq.
print('{:>12.5e}'.format(987.65))
print('{:012.2E}'.format(987.65))
# 9.87650e+02
# 00009.88E+02
Əhəmiyyətli rəqəmlər (əhəmiyyətli rəqəmlərin sayı)
Siz aşağıdakıları etməklə rəqəmlərin ümumi sayını təyin edə bilərsiniz Nəticədən asılı olaraq eksponensial qeyd avtomatik olaraq istifadə olunacaq. Nəzərə alın ki, onluq nöqtədən sonra gələn sıfırlar buraxılacaq..[n]g
print('{:.2g}'.format(123.456))
print('{:.3g}'.format(123.456))
print('{:.8g}'.format(123.456))
print('{:.3g}'.format(0.0001234))
# 1.2e+02
# 123
# 123.456
# 0.000123
Əgər g buraxsanız, nəticə tam ədəd olmayacaq. g əksər hallarda eynidir, ancaq çıxışın tam olduğu hallarda.
print('{:.2}'.format(123.456))
print('{:.3}'.format(123.456))
print('{:.8}'.format(123.456))
print('{:.3}'.format(0.0001234))
# 1.2e+02
# 1.23e+02
# 123.456
# 0.000123
Eyni dəyəri emal etsək, müvafiq olaraq aşağıdakıları alırıq.
print('{:.3f}'.format(123.456))
print('{:.3e}'.format(123.456))
print('{:.3g}'.format(123.456))
print('{:.3}'.format(123.456))
# 123.456
# 1.235e+02
# 123
# 1.23e+02
print('{:.8f}'.format(123.456))
print('{:.8e}'.format(123.456))
print('{:.8g}'.format(123.456))
print('{:.8}'.format(123.456))
# 123.45600000
# 1.23456000e+02
# 123.456
# 123.456
g halında və ya buraxılıbsa, ondalık nöqtədən sonra arxadakı sıfırlar buraxılır, buna görə də eyni sayda əhəmiyyətli rəqəmləri (əhəmiyyətli rəqəmlərin sayı) çıxarmaq istəyirsinizsə, e və ya E eksponensial qeydindən istifadə edin. tam hissəsi həmişə bir rəqəmdir və onluq nöqtə göstərilən rəqəmlərin sayıdır, ona görə də n əhəmiyyətli rəqəm çıxarmaq istəyirsinizsə, sadəcə n-1-i göstərin.
print('{:.4e}'.format(123.456))
print('{:.4e}'.format(0.000012345))
print('{:.4e}'.format(12))
# 1.2346e+02
# 1.2345e-05
# 1.2000e+01
Faiz göstəricisi
Formatlama spesifikasiyası sətirində % göstərilibsə, rəqəmli float və ya int dəyəri 100-ə vurulur və % ilə sətirə çevrilir.
Onluq nöqtəsindən sonra rəqəmlərin sayını təyin etmək də mümkündür. Varsayılan olaraq, onluq nöqtədən sonra altı rəqəmdir. Sola əsaslandırma, mərkəzə əsaslandırma, sağa əsaslandırma və sıfır doldurma da mövcuddur. % də simvol kimi sayılır.
print('{:%}'.format(0.12345))
print('{:.2%}'.format(0.12345))
# 12.345000%
# 12.35%
print('{:%}'.format(10))
print('{:.2%}'.format(10))
# 1000.000000%
# 1000.00%
print('{:>7.2%}'.format(0.12345))
print('{:07.2%}'.format(0.12345))
# 12.35%
# 012.35%