Python дээр тоо эсвэл мөрийг янз бүрийн формат руу хөрвүүлэх (форматлах) бол суулгасан функц формат() эсвэл str.format() мөрийн аргыг ашиглана уу.
Энэ хэсэгт бид дараах функцуудыг хэрхэн ашиглах талаар тайлбарлах болно.
- суулгасан функц (жишээ нь програмчлалын хэл дээр)
format()
- мөр арга
str.format()
Нэмж дурдахад дараах формат руу хөрвүүлэх форматын тодорхойлолтын мөрийг жишээ кодоор тайлбарласан болно.
- Зүүн талд, Төвд, Баруун талд
- тэг дүүргэх
- Тэмдэг (нэмэх эсвэл хасах)
- Цифр тусгаарлагч (таслал, доогуур зураас)
- Хоёртын, наймтын, арван зургаатын тоонууд
- Аравтын бутархайн дараах цифрүүдийн тоог зааж өгнө үү
- Чухал тоо (чухал цифрүүдийн тоо)
- экспоненциал тэмдэглэгээ
- Хувиар харуулах
Python 3.6-аас хойш str.format() стринг аргад f-strings (f-strings) нэмсэнийг илүү товч болгохыг анхаарна уу.
- Суулгасан функц: format()
- String method str.format()
- Зүүн талд, Төвд, Баруун талд
- 0 дүүргэ
- Тэмдэг (нэмэх эсвэл хасах)
- Цифр тусгаарлагч (таслал, доогуур зураас)
- Хоёртын, наймтын, арван зургаатын тоонууд
- Аравтын бутархайн дараах цифрүүдийн тоог зааж өгнө үү
- экспоненциал тэмдэглэгээ
- Чухал тоо (чухал цифрүүдийн тоо)
- Хувиар харуулах
Суулгасан функц: format()
format() нь стандарт Python-д суурилуулсан функцээр хангагдсан.
Тойм нь дараах байдалтай байна.
format(value, format_spec)
- Эхний аргумент: the
value
Анхны үнэ цэнэ. String str, number int, float гэх мэт. - Хоёр дахь аргумент
format_spec
Тодорхойлолтын мөрийг форматлах. String str - Буцах утга: форматлагдсан мөр str
- Эхний аргумент: the
Жишээнүүдийг доор харуулав. Формат мөрийн төрлүүд, тэдгээрийг хэрхэн бичих талаар дараа тайлбарлах болно.
Энэ жишээнд бид эхний аргумент болгон тоон литералууд болон стринг литералуудыг ашигласан боловч мэдээж та эдгээр утгыг агуулсан хувьсагчдыг ашиглаж болно.
s = format(255, '04x')
print(s)
print(type(s))
# 00ff
# <class 'str'>
print(format('center', '*^16'))
# *****center*****
String method str.format()
Мөн str string төрлийн формат() арга байдаг.
Формат() аргыг дууддаг str мөр дэх {}-г орлуулах талбар гэж нэрлэх ба формат() аргументаар солигдоно.
Форматын тодорхойлолтын мөрийг орлуулах талбарт {} дараа нь “:” гэж бичнэ.
Буцах утга нь форматлагдсан стр.
Дээр тайлбарласан суулгасан функцын формат()-тай тэнцэх процесс дараах байдалтай байна.
s = '{:04x}'.format(255)
print(s)
print(type(s))
# 00ff
# <class 'str'>
print('{:*^16}'.format('center'))
# *****center*****
Дахин хэлэхэд бид тоон литерал болон стринг литералуудыг аргумент болгон ашиглаж байгаа ч мэдээж хувьсагчдыг бас хүлээн зөвшөөрөх боломжтой.
Орлуулах талбаруудын аргументуудыг зааж өгч байна
Аргументуудыг дарааллаар нь зааж өгөх (өгөгдмөл)
Олон тооны орлуулах талбар {} байж болох ба анхдагчаар аргын аргументуудыг дарааллаар нь боловсруулдаг. Хэрэв {}-д байгаа форматын үзүүлэлтийн мөрийг орхигдуулсан бол str()-р мөр болгон хувиргах болно.
Мөрт хувьсагчийн утгыг оруулж хэвлэхэд хэрэгтэй.
print('{}-{}-{}'.format('100', '二百', 300))
# 100-二百-300
Бүхэл тоонуудын хувьд байрлалын аргументыг зааж өгнө үү
Хэрэв бүхэл тоон утгыг {0} эсвэл {1} гэх мэт {}-д заасан бол гаралт нь аргументуудын дарааллаас хамаарна. Ижил дугаарыг дахин дахин ашиглаж болно. Мөрт ижил утгыг оруулахыг хүсвэл энэ нь хэрэг болно.
print('{0}-{1}-{0}'.format('foo', 'bar'))
# foo-bar-foo
Дурын нэрсийн түлхүүр үгийн аргументуудыг зааж өгөх (мөр)
Та мөн {}-д дурын нэрийг зааж, түлхүүр үгийн аргумент болгон оруулж болно.
print('{day}/{month}/{year}/'.format(day=11, month=1, year=2018))
# 11/1/2018
Жагсаалт эсвэл толь бичгийг аргумент болгон зааж өгнө үү
Жагсаалт болон толь бичгүүдийг аргумент болгон зааж өгч болно.
Орлуулах талбарт жагсаалтын индекс эсвэл толь бичгийн түлхүүрийг тодорхойлохын тулд [] ашиглана уу. “‘” ба “” хашилтыг толь бичгийн түлхүүрийг тодорхойлоход ашигладаггүйг анхаарна уу.
Хэрэв та ижил аргументыг дахин дахин ашиглахыг хүсвэл дээр дурдсанчлан бүхэл тоо эсвэл мөр (нэр) зааж өгөх хэрэгтэй.
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.
Жагсаалтад *-г нэмж аргумент болгон зааж өгснөөр байрлалын аргумент болгон, толь бичигт ** гэж нэмээд аргумент болгон зааж өгснөөр түлхүүр үгийн аргумент болгон өргөжүүлж болно.
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.
Буржгар хаалтны тайлбар {}
Хэрэв та {,} буржгар хаалтуудыг format() аргаар бичихийг хүсвэл {{,}} шиг хоёр удаа давтана уу. Урвуу налуу зурааснаас зайлсхийх боломжгүй гэдгийг анхаарна уу.
print('{{}}-{num}-{{{num}}}'.format(num=100))
# {}-100-{100}
форматлагдсан мөр
Аль ч тохиолдолд форматыг зааж өгөхийн тулд бүхэл тооны утга эсвэл {}-д нэрийн мөрийн ард “:format string” гэж бичнэ үү.
print('{num:x}'.format(num=255))
# ff
print('{day}/{month:02}/{year:02}/'.format(day=11, month=1, year=2018))
# 11/01/2018
Дараах хэсэгт бид форматын мөрийг ашиглан форматыг хэрхэн тодорхойлохыг тайлбарлах болно. Загварын код нь str.format() гэсэн стринг аргыг ашигладаг боловч ижил форматтай мөрийг суулгасан функцийн формат()-д ашиглаж болно. Суурилуулсан функцийн формат()-д форматын тодорхойлолтын мөрийг хоёр дахь аргумент болгон зааж өгсөн болно.
Зүүн талд, Төвд, Баруун талд
Та зүүн тийш чиглэсэн, төв рүү чиглэсэн, баруун тийш чиглэсэн гэх мэтийг доор байрлуулж болно. Нийт тэмдэгтийн тоог тоогоор зааж өгнө үү.
<
^
>
print('left : {:<10}'.format(100))
print('center: {:^10}'.format(100))
print('right : {:>10}'.format(100))
# left : 100
# center: 100
# right : 100
Та мөн бөглөх тэмдэгтийг зааж өгч болно. Хэрэв орхигдуулсан бол дээрх жишээн дээрх шиг хоосон зай болно.
Та нэг тэмдэгт байгаа бол давхар байт тэмдэгтүүдийг ашиглаж болно.
print('left : {:*<10}'.format(100))
print('center: {:a^10}'.format(100))
print('right : {:鬼>10}'.format(100))
# left : 100*******
# center: aaa100aaaa
# right : 鬼鬼鬼鬼鬼鬼鬼100
> (-,+) тэмдгийг харгалздаггүй. Хэрэв та = ашигладаг бол тэмдгийн ард заасан тэмдэгт орно. Хэрэв та + гэж зааж өгөхийг хүсвэл =-ийн ард + гэж бичнэ үү. Тэмдгийн боловсруулалтын дэлгэрэнгүйг дараа нь тайлбарлах болно.
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
<, ^, болон > тэмдэгт мөрүүдэд зааж өгч болох боловч = нь ValueError алдаа гаргахад хүргэдэг. Хэрэв та мөрт = ашиглахыг хүсвэл int() ашиглан тоо болгон хөрвүүлэх хэрэгтэй.
# print('sign: {:0=10}'.format('-100'))
# ValueError: '=' alignment not allowed in string format specifier
print('sign: {:0=10}'.format(int('-100')))
# sign: -000000100
Хөвөгч цэгийн тоонд мөн адил хамаарна. Аравтын тоог мөн тэмдэгт гэж тооцдог.
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
Жагсаалт, залгуур гэх мэтийг байгаагаар нь зааж өгвөл алдаа гаргах бөгөөд str() ашиглан мөр болгон хувиргаж болно.
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]*****
Зүүн талд, төвөөс зөвтгөгдсөн, баруун тийш зөвтгөгдсөний хувьд ljust(), center(), rjust() гэсэн зориулалтын мөрийн аргууд бас байдаг.
0 дүүргэ
Хэрэв та цифрүүдийн тоог тэгээр дүүргэх замаар тохируулахыг хүсвэл бөглөх тэмдэгтийг 0 болгож, баруун тийш зөвтгө.
Тэгээр дүүргэх тохиолдолд зэрэгцүүлэх тэмдгийг орхигдуулсан тохиолдолд = гэж заасан мэт боловсруулагдана.
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
Тэг дүүргэхийн тулд zfill() гэж нэрлэгддэг тусгай мөрийн арга бас байдаг.
Тэмдэг (нэмэх эсвэл хасах)
Анхдагч байдлаар, зөвхөн сөрөг тоонууд нь тэмдгээр тэмдэглэгдсэн байдаг (хасах-).
Форматын үзүүлэлтийн мөрөнд + нэмэх үед эерэг тоонуудад тэмдэг (нэмэх +) гарч ирнэ. Хэрэв хоосон зай нэмбэл эерэг тооны эхэнд хоосон зай гарч ирэх ба цифрүүдийн тоог сөрөг тоотой зэрэгцүүлнэ.
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
Дээр дурдсан тэг бөглөх гэх мэт дурын тэмдэгтээр бөглөхдөө болгоомжтой байгаарай. + болон хоосон зайгүй өгөгдмөл нь эерэг тоонуудыг нэг тэмдэгтээр дүүргэдэг.
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
Хэрэв зэрэгцүүлэх тэмдэг ашигласан бол тэгшлэх тэмдгийн ард тэмдгийн тэмдэглэгээг бичнэ.
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
Цифр тусгаарлагч (таслал, доогуур зураас)
Гурван орон бүрт таслал эсвэл доогуур зураас _ тусгаарлагч нэмнэ. Энэ нь их тоог уншихад хялбар болгодог. Доод зураас_ нь Python 3.6-д нэмсэн сонголт тул үүнийг өмнөх хувилбаруудад ашиглах боломжгүй гэдгийг анхаарна уу.
print('{:,}'.format(100000000))
# 100,000,000
print('{:_}'.format(100000000))
# 100_000_000
Хөвөгч цэгийн тооны хөвөгч төрлүүдийн хувьд зөвхөн бүхэл хэсэг нь тусгаарлагдана.
print('{:,}'.format(1234.56789))
# 1,234.56789
Хоёртын, наймтын, арван зургаатын тоонууд
Гаралтын хувьд тоон утгыг хоёртын, наймтын, арван зургаатын тоонд хөрвүүлдэг.
b
: Хоёртынo
: Наймd
: Аравтынx
,X
: 16 тоот (том үсгийг томоор бичсэн)
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
Үүнийг мөн 0 дүүргэлттэй хослуулж болох бөгөөд ихэвчлэн хоёртын болон арван зургаатын тооллын тоонуудыг зэрэгцүүлэхэд ашигладаг.
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
Тэг бөглөх тэмдэгтүүдийн тоог угтварыг харгалзан зааж өгөх ёстойг анхаарна уу.
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
Хоёртын болон арван зургаатын тоонуудын хувьд зөвхөн доогуур зураас _ оронтой тусгаарлагчийг оруулж болно (Python 3.6 эсвэл түүнээс хойшхи). 4 оронтой тусгаарлагчийг ашигладаг; тэгээр дүүргэсэн тэмдэгтүүдийн тоо нь доогуур зураасны тоог мөн харгалзан үзэх ёстой.
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
Зөвхөн int бүхэл тооны төрөл нь форматыг хоёртын эсвэл арван зургаатын тоонд хөрвүүлэх боломжтой. Та үүнийг тоо болгон хөрвүүлэхийн тулд int() ашиглаж болно.
# print('hex: {:08x}'.format('255'))
# ValueError: Unknown format code 'X' for object of type 'str'
print('hex: {:08x}'.format(int('255')))
# hex: 000000ff
Аравтын бутархайн дараах цифрүүдийн тоог зааж өгнө үү
Аравтын бутархайн дараах цифрүүдийн тоог зааж өгөхийн тулд дараах зүйлийг хийнэ үү: n нь цифрүүдийн тоо юм. Аравтын бутархайн дараах цифрүүдийн тоо нь бүхэл хэсгийн цифрүүдийн тооноос үл хамааран заасан цифр болно..[n]f
print('{:.2f}'.format(123.456))
print('{:.5f}'.format(123.456))
print('{:.3f}'.format(0.0001234))
# 123.46
# 123.45600
# 0.000
Аравтын бутархайн зүүн талыг дээр дурдсанчлан зүүн тийш, голд зөвтгөгдсөн, баруун тийш чиглэсэн, тэгээр дүүргэсэн гэж зааж өгч болно. Хэрэв зорилтот утгын цифрүүдийн тоо заасан тооноос их байвал юу ч хийхгүй. Хэрэв зорилтот утга дахь цифрүүдийн тоо заасан цифрээс их байвал юу ч хийхгүй.
print('{:>12.5f}'.format(123.456))
print('{:012.5f}'.format(123.456))
print('{:06.5f}'.format(123.456))
# 123.45600
# 000123.45600
# 123.45600
Хэрэв та аравтын бутархайн дараа анхны цифрээс цөөн тооны цифрийг зааж өгвөл утгыг дугуйруулна. Энэ нь хамгийн ойрын бүхэл тоо руу бөөрөнхийлдөггүй, харин тэгш тоо, жишээлбэл. 0.5-ыг 0 болгон дугуйрсан.
print('{:.0f}'.format(0.4))
print('{:.0f}'.format(0.5))
print('{:.0f}'.format(0.6))
# 0
# 0
# 1
Хэрэв та ерөнхий дугуйралтыг ашиглахыг хүсвэл стандарт номын сангийн аравтын бутархайн quantize() аргыг ашиглаж болно.
экспоненциал тэмдэглэгээ
Хөвөгч цэг бүхий хөвөгч тоог str тэмдэгт мөр болгон хөрвүүлэхэд цифрүүдийн тооноос хамааран автоматаар экспоненциал тэмдэглэгээнд бичигдэнэ. Бүхэл тооны төрөл int байхгүй.
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
Хэрэв та форматын тодорхойлолтын мөрөнд e эсвэл E-г зааж өгвөл та үргэлж экспоненциал тэмдэглэгээ рүү хөрвүүлэх боломжтой. Гаралтад ашигласан тэмдэгтүүд нь e ба E байх болно.
print('{:e}'.format(0.0001234))
print('{:E}'.format(0.0001234))
# 1.234000e-04
# 1.234000E-04
Мөн аравтын бутархайн дараах цифрүүдийн тоог зааж өгөх боломжтой. Бүхэл тоо нь үргэлж нэг оронтой байх ба аравтын бутархай нь заасан цифрүүдийн тоо байх болно.
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
Хэрэв та зүүн тийш, төв рүү чиглэсэн, баруун тийш чиглэсэн, эсвэл тэгээр дүүргэсэн бол e-, E+ гэх мэтийг цифр (тэмдэгт) гэж тооцохыг анхаарна уу.
print('{:>12.5e}'.format(987.65))
print('{:012.2E}'.format(987.65))
# 9.87650e+02
# 00009.88E+02
Чухал тоо (чухал цифрүүдийн тоо)
Та дараах үйлдлийг хийснээр нийт цифрүүдийн тоог тодорхойлж болно Үр дүнгээс хамааран экспоненциал тэмдэглэгээ автоматаар ашиглагдана. Аравтын бутархайн араас хойшхи тэгийг орхигдуулна гэдгийг анхаарна уу..[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-г орхивол гаралт нь бүхэл тоо болохгүй. g нь ихэнх тохиолдолд ижил боловч гаралт нь бүхэл тоо байх тохиолдолд л.
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
Хэрэв бид ижил утгыг боловсруулбал дараахь зүйлийг авна.
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-ийн хувьд эсвэл орхигдуулсан тохиолдолд аравтын бутархайн араас хойшхи тэгүүдийг орхигдуулдаг тул хэрэв та ижил тооны чухал цифрүүдийг (чухал цифрүүдийн тоо) гаргахыг хүсвэл e эсвэл E-ийн экспоненциал тэмдэглэгээг ашиглана уу. Бүхэл тоо нь үргэлж нэг оронтой байх ба аравтын бутархай нь заасан цифрүүдийн тоо тул n чухал цифр гаргахыг хүсвэл n-1-ийг зааж өгнө үү.
print('{:.4e}'.format(123.456))
print('{:.4e}'.format(0.000012345))
print('{:.4e}'.format(12))
# 1.2346e+02
# 1.2345e-05
# 1.2000e+01
Хувиар харуулах
Хэрэв форматын үзүүлэлтийн мөрөнд % гэж заасан бол float эсвэл int тоон утгыг 100-аар үржүүлж, % тэмдэгт мөр болгон хувиргана.
Мөн аравтын бутархайн дараах цифрүүдийн тоог зааж өгөх боломжтой. Өгөгдмөл нь аравтын бутархайн дараа зургаан оронтой байна. Зүүн талд нь зөв, төвөөс зөв, баруун талд нь зөв, тэгээр дүүргэх боломжтой. % нь мөн тэмдэгт гэж тооцогддог.
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%