Python-да форматты түрлендіру, пішім (нөлдік толтыру, экспоненциалды белгілеу, он алтылық және т.б.)

Іскерлік

Python бағдарламасында санды немесе жолды әртүрлі пішімдерге түрлендіру (пішімдеу) үшін кірістірілген функция пішімі() немесе str.format() жолы әдісін пайдаланыңыз.

Бұл бөлімде біз келесі функцияларды қалай пайдалану керектігін түсіндіреміз.

  • кірістірілген функция (мысалы, бағдарламалау тілінде)format()
  • жол әдісіstr.format()

Бұған қоса, келесі пішімге түрлендіруге арналған пішім спецификациясының жолы үлгі кодымен түсіндіріледі.

  • Сол жаққа негізделген, Орталыққа негізделген, Оң жаққа негізделген
  • нөлдік толтыру
  • Белгі (плюс немесе минус)
  • Санды бөлгіш (үтір, астын сызу)
  • Екілік, сегіздік және он алтылық сандар
  • Ондық бөлшектен кейінгі цифрлар санын көрсетіңіз
  • Маңызды сандар (маңызды сандар саны)
  • экспоненциалды белгілеу
  • Пайыздық көрсеткіш

Python 3.6 нұсқасынан бастап str.format() жол әдісіне қысқарақ болу үшін f-жолдары (f-жолдары) қосылғанын ескеріңіз.

Кірістірілген функция: format()

format() стандартты Python ендірілген функциясы ретінде қамтамасыз етілген.

Сұлба келесідей.

  • format(value, format_spec)
    • Бірінші аргумент: thevalue
      Бастапқы мән. String str, number int, float және т.б.
    • Екінші аргументformat_spec
      Формат сипаттамасы жолы. String str
    • Қайтарылатын мән: пішімделген жол str

Мысалдары төменде көрсетілген. Пішім жолдарының түрлері және оларды жазу жолы кейінірек сипатталады.

Бұл мысалда біз бірінші аргумент ретінде сандық әріптерді және жол литералдарын пайдаландық, бірақ, әрине, осы мәндерді қамтитын айнымалы мәндерді пайдалануға болады.

s = format(255, '04x')
print(s)
print(type(s))
# 00ff
# <class 'str'>

print(format('center', '*^16'))
# *****center*****

String әдісі str.format()

Сондай-ақ str жолының түрі үшін format() әдісі бар.

Format() әдісін шақыратын str жолындағы {} ауыстыру өрісі деп аталады және формат() әдісінің аргументімен ауыстырылады.

Пішім спецификациясының жолы {} ауыстыру өрісіне, одан кейін «:» жазылуы керек.

Қайтару мәні пішімделген жол 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}

пішімделген жол

Екі жағдайда да пішімді көрсету үшін {} ішінде бүтін сан немесе атау жолынан кейін «:формат жолы» деп жазыңыз.

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

#ҚАТЕ!

# 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: он алтылық (бас әріптер бас әріппен жазылады)
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%
Copied title and URL