Til að breyta (sniða) tölu eða streng í ýmis snið í Python, notaðu innbyggt fallsnið() eða strengjaaðferðina str.format().
Í þessum hluta munum við útskýra hvernig á að nota eftirfarandi aðgerðir.
- innbyggð aðgerð (t.d. í forritunarmáli)
format()
- strengjaaðferð
str.format()
Að auki er sniðforskriftarstrengurinn fyrir umbreytingu í eftirfarandi snið útskýrður með sýnishornskóða.
- Vinstri-réttlátt, Miðjuréttað, Hægraréttað
- núll fylling
- Merki (plús eða mínus)
- Talnaskil (komma, undirstrik)
- Tvöfaldur, áttund og sextán tal
- Tilgreindu fjölda tölustafa á eftir aukastafnum
- Mikilvægar tölur (fjöldi mikilvægra tölustafa)
- veldisvísismerki
- Hlutfallsskjár
Athugaðu að síðan Python 3.6 hefur f-strengir (f-strengir) verið bætt við strengjaaðferðina str.format() til að gera hana hnitmiðaðri.
- Innbyggð aðgerð: format()
- Strengjaaðferð str.format()
- Vinstri-réttlátt, Miðjuréttað, Hægraréttað
- 0 fylla
- Merki (plús eða mínus)
- Talnaskil (komma, undirstrik)
- Tvöfaldur, áttund og sextán tal
- Tilgreindu fjölda tölustafa á eftir aukastafnum
- veldisvísismerki
- Mikilvægar tölur (fjöldi mikilvægra tölustafa)
- Hlutfallsskjár
Innbyggð aðgerð: format()
format() er veitt sem staðlað Python innbyggð aðgerð.
Yfirlitið er sem hér segir.
format(value, format_spec)
- Fyrstu rökin: the
value
Upprunalega gildið. Strengur str, tala int, flot o.s.frv. - Önnur rökin
format_spec
Forskriftarstrengur. Strengur str - Skilagildi: sniðinn strengur str
- Fyrstu rökin: the
Dæmi eru sýnd hér að neðan. Tegundum sniðstrengja og hvernig á að skrifa þá er lýst síðar.
Í þessu dæmi höfum við notað tölustafi og strengjabókstafi sem fyrstu rök, en auðvitað er hægt að nota breytur sem innihalda þessi gildi.
s = format(255, '04x')
print(s)
print(type(s))
# 00ff
# <class 'str'>
print(format('center', '*^16'))
# *****center*****
Strengjaaðferð str.format()
Það er líka til snið() aðferð fyrir strenginn str gerð.
{} í strengnum str sem kallar format() aðferðina kallast staðgengisreiturinn og kemur í stað röksemda snið() aðferðarinnar.
Sniðstilgreiningarstrengurinn ætti að vera skrifaður í staðgöngureitinn {} og síðan „:“.
Skilagildið er sniðinn strengur str.
Samsvarandi ferli við innbyggða fallsniðið() sem lýst er hér að ofan er sem hér segir.
s = '{:04x}'.format(255)
print(s)
print(type(s))
# 00ff
# <class 'str'>
print('{:*^16}'.format('center'))
# *****center*****
Aftur erum við að nota tölustafi og strengjabókstafi sem rök, en auðvitað eru breytur líka ásættanlegar.
Tilgreina rök fyrir staðgöngureitum
Tilgreindu rök í röð (sjálfgefið)
Það geta verið margir staðgengisreitir {} og sjálfgefið er aðferðarrök unnin í röð. Ef sniðforskriftarstrengnum í {} er sleppt, verður honum bara breytt í streng með str().
Gagnlegt til að setja inn breytugildi í streng og prenta þau.
print('{}-{}-{}'.format('100', '二百', 300))
# 100-二百-300
Tilgreindu stöðurök fyrir heiltölugildi
Ef heiltölugildi er tilgreint í {}, eins og {0} eða {1}, mun úttakið ráðast af röð frumbreytanna. Hægt er að nota sama númerið ítrekað. Þetta er gagnlegt þegar þú vilt setja sama gildi í streng.
print('{0}-{1}-{0}'.format('foo', 'bar'))
# foo-bar-foo
Tilgreindu lykilorðarrök fyrir handahófskennd nöfn (strengi)
Þú getur líka tilgreint hvaða nafn sem er í {} og slegið það inn sem lykilorðarrök.
print('{day}/{month}/{year}/'.format(day=11, month=1, year=2018))
# 11/1/2018
Tilgreindu lista eða orðabók sem rök
Hægt er að tilgreina lista og orðabækur sem rök.
Notaðu [] til að tilgreina vísitölu lista eða lykil orðabókar í staðgöngureit. Athugaðu að gæsalappir „‘“ og „“ eru ekki notaðar til að tilgreina orðabókarlykla.
Ef þú vilt nota sömu rökin ítrekað þarftu að tilgreina heiltölugildi eða streng (nafn) eins og lýst er hér að ofan.
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.
Það er hægt að stækka það sem stöðurök með því að bæta * við listann og tilgreina það sem rök, eða sem lykilorðarrök með því að bæta ** við orðabókina og tilgreina það sem rök.
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.
Lýsing á krulluðum sviga {}
Ef þú vilt skrifa krullaða sviga {,} í format() aðferðinni skaltu endurtaka það tvisvar eins og {{,}}. Athugaðu að ekki er hægt að komast undan skástrikunum.
print('{{}}-{num}-{{{num}}}'.format(num=100))
# {}-100-{100}
sniðinn strengur
Í báðum tilfellum, til að tilgreina sniðið, skrifaðu „:format string“ á eftir heiltölugildinu eða nafnstrengnum í {}.
print('{num:x}'.format(num=255))
# ff
print('{day}/{month:02}/{year:02}/'.format(day=11, month=1, year=2018))
# 11/01/2018
Hér á eftir munum við útskýra hvernig á að tilgreina sniðið með því að nota sniðstreng. Dæmiskóðinn notar strengjaaðferðina str.format(), en sama sniðstreng er hægt að nota með innbyggðu fallsniðinu(). Í innbyggðu fallsniði() er sniðforskriftarstrengurinn tilgreindur sem önnur rök.
Vinstri-réttlátt, Miðjuréttað, Hægraréttað
Þú getur stillt til vinstri, stillt í miðju, stillt til hægri, osfrv. Tilgreindu heildarfjölda stafa sem tölu.
<
^
>
print('left : {:<10}'.format(100))
print('center: {:^10}'.format(100))
print('right : {:>10}'.format(100))
# left : 100
# center: 100
# right : 100
Þú getur líka tilgreint staf sem á að fylla út. Ef því er sleppt, eins og í dæminu hér að ofan, er það bil.
Þú getur notað tvöfalda bæta stafi svo framarlega sem það er einn stafur.
print('left : {:*<10}'.format(100))
print('center: {:a^10}'.format(100))
print('right : {:鬼>10}'.format(100))
# left : 100*******
# center: aaa100aaaa
# right : 鬼鬼鬼鬼鬼鬼鬼100
Hægri réttlæting með > tekur ekki tillit til táknsins (-,+). Ef þú notar = er táknið fylgt eftir með tilgreindum staf. Ef þú vilt tilgreina +, skrifaðu + á eftir =. Nánar er fjallað um skiltavinnslu síðar.
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
<, ^, og > hægt að tilgreina fyrir strengi, en = mun leiða til villu ValueError. Ef þú vilt nota = fyrir streng þarftu að breyta því í tölu með int().
# print('sign: {:0=10}'.format('-100'))
# ValueError: '=' alignment not allowed in string format specifier
print('sign: {:0=10}'.format(int('-100')))
# sign: -000000100
Sama gildir um flottölur. Aukastafir eru einnig taldir sem stafur.
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
Listar, tuples o.s.frv. mun valda villu ef þeir eru tilgreindir eins og þeir eru og er hægt að breyta þeim í strengi með því að nota 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]*****
Fyrir vinstrijustaða, miðjujustaða og hægrijustaða eru einnig sérstakar strengjaaðferðir sem kallast ljust(), center() og rjust().
0 fylla
Ef þú vilt stilla fjölda tölustafa með núllfyllingu skaltu stilla stafinn sem á að fylla út á 0 og hægri réttlæta hann.
Ef um er að ræða núllfyllingu, ef jöfnunartákninu er sleppt, er það unnið eins og = væri tilgreint.
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
#VILLA!
# print('zero padding: {:010}'.format('-100'))
# ValueError: '=' alignment not allowed in string format specifier
Fyrir núllfyllingu er einnig sérstök strengjaaðferð sem kallast zfill().
Merki (plús eða mínus)
Sjálfgefið er að einungis neikvæðar tölur eru merktar með tákni (mínus-).
Þegar + er bætt við sniðforskriftarstrenginn birtist tákn (plús +) einnig fyrir jákvæðar tölur. Ef bili er bætt við birtist bil í upphafi jákvæðu tölunnar og fjöldi tölustafa er samræmdur neikvæðu tölunni.
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
Vertu varkár þegar þú fyllir út með handahófskenndum stöfum, eins og núllfyllingunni sem nefnd er hér að ofan. Sjálfgefið, án + og engin bil, fyllir jákvæðar tölur með einum staf í viðbót.
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
Ef jöfnunartákn er notað, ætti táknið að vera skrifað á eftir jöfnunartákninu.
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
Talnaskil (komma, undirstrik)
Bættu við kommu eða undirstrik _ skilju á þriggja stafa tölu. Þetta gerir stórar tölur auðveldari að lesa. Athugaðu að underscore_ er valkostur sem bætt er við í Python 3.6, svo það er ekki hægt að nota hann í fyrri útgáfum.
print('{:,}'.format(100000000))
# 100,000,000
print('{:_}'.format(100000000))
# 100_000_000
Þegar um er að ræða flottölutegundir með flottölum er aðeins heiltöluhlutinn afmarkaður.
print('{:,}'.format(1234.56789))
# 1,234.56789
Tvöfaldur, áttund og sextán tal
Breytir tölugildum í tvíundir, áttund og sextánda tölur fyrir úttak.
b
: Tvöfalduro
: Octald
: Aukastafurx
,X
: Sextánstafir (hástafir eru með hástöfum)
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
Það er líka hægt að sameina það með 0-fyllingu, og er oft notað til að samræma tölustafi í tvíundar- og sextánsnúmerum.
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
Athugið að tilgreina þarf fjölda núllútfyllingar með hliðsjón af forskeytinu.
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
Fyrir tvöfalda og sextánda tölu er aðeins hægt að setja inn undirstrikið _ tölustafaskil (Python 3.6 eða nýrri). Notað er fjögurra stafa skilrúm; fjöldi núllfylltra stafa verður einnig að taka tillit til fjölda undirstrikunar.
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
Aðeins heiltölugerðin int getur umbreytt sniðinu í tvíundir eða sextánda tölu. Þú getur notað int() til að breyta því í tölu.
# print('hex: {:08x}'.format('255'))
# ValueError: Unknown format code 'X' for object of type 'str'
print('hex: {:08x}'.format(int('255')))
# hex: 000000ff
Tilgreindu fjölda tölustafa á eftir aukastafnum
Til að tilgreina fjölda tölustafa á eftir aukastaf skaltu gera eftirfarandi: n er fjöldi tölustafa. Fjöldi tölustafa á eftir tugabroti verður tilgreindur fjöldi tölustafa óháð fjölda tölustafa í heiltöluhlutanum..[n]f
print('{:.2f}'.format(123.456))
print('{:.5f}'.format(123.456))
print('{:.3f}'.format(0.0001234))
# 123.46
# 123.45600
# 0.000
Vinstri hlið tugabrotsins er hægt að tilgreina sem vinstrijustaðan, miðjuréttaðan, hægrijustaðan eða núllútfylltan eins og lýst er hér að ofan. Ef fjöldi tölustafa markgildis er meiri en tilgreind tala er ekkert að gert. Ef fjöldi tölustafa í markgildinu er meiri en tilgreindur tölustafafjöldi er ekkert gert.
print('{:>12.5f}'.format(123.456))
print('{:012.5f}'.format(123.456))
print('{:06.5f}'.format(123.456))
# 123.45600
# 000123.45600
# 123.45600
Ef þú tilgreinir fjölda tölustafa færri en upphaflegan fjölda tölustafa á eftir aukastafnum verður gildið námundað. Athugið að þetta er ekki námundun að næstu heilu tölu heldur að sléttri tölu, t.d. 0,5 er námundað í 0.
print('{:.0f}'.format(0.4))
print('{:.0f}'.format(0.5))
print('{:.0f}'.format(0.6))
# 0
# 0
# 1
Ef þú vilt nota almenna námundun geturðu notað quantize() aðferðina fyrir staðlaða aukastaf bókasafns.
veldisvísismerki
Þegar flottölu með flottölu er breytt í streng str, þá verður hún sjálfkrafa skrifuð með veldisvísi, eftir fjölda tölustafa. Heiltala gerð int gerir það ekki.
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
Ef þú tilgreinir e eða E í forskriftarstrengnum geturðu alltaf umbreytt í veldisvísismerki. Stafirnir sem notaðir eru í úttakinu verða e og E, í sömu röð.
print('{:e}'.format(0.0001234))
print('{:E}'.format(0.0001234))
# 1.234000e-04
# 1.234000E-04
Einnig er hægt að tilgreina fjölda tölustafa á eftir aukastafnum. Heiltöluhlutinn verður alltaf einn stafur og aukastafurinn verður tilgreindur fjöldi tölustafa.
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
Athugaðu að ef þú tilgreinir vinstrijustaða, miðjujustaða, hægrijustaða eða núllútfyllta munu e-, E+ o.s.frv. einnig teljast sem tölustafir (stafir).
print('{:>12.5e}'.format(987.65))
print('{:012.2E}'.format(987.65))
# 9.87650e+02
# 00009.88E+02
Mikilvægar tölur (fjöldi mikilvægra tölustafa)
Þú getur tilgreint heildarfjölda tölustafa með því að gera eftirfarandi. Það fer eftir niðurstöðunni, veldisvísun verður notuð sjálfkrafa. Athugaðu að núllum á eftir tugabroti verður sleppt..[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
Ef þú sleppir g verður úttakið ekki heil tala. g er það sama í flestum tilfellum, en aðeins í þeim tilvikum þar sem úttakið er heil tala.
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
Ef við vinnum úr sama gildi fáum við eftirfarandi í sömu röð.
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
Þegar um er að ræða g eða ef því er sleppt, er núllunum á eftir tugastafnum sleppt, þannig að ef þú vilt gefa út sama fjölda marktækra tölustafa (fjölda marktækra tölustafa), notaðu veldisvísismerki e eða E. heiltöluhluti er alltaf einn stafur og tugastafurinn er tilgreindur fjöldi tölustafa, þannig að ef þú vilt gefa út n marktæka tölustafi skaltu bara tilgreina 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
Hlutfallsskjár
Ef % er tilgreint í sniðforskriftarstrengnum er gildi talnaflotans eða int margfaldað með 100 og breytt í streng með %.
Einnig er hægt að tilgreina fjölda tölustafa á eftir aukastafnum. Sjálfgefið er sex tölustafir á eftir aukastafnum. Vinstrijusta, miðjujusta, hægrijusta og núllfyllingar eru einnig fáanlegar. % er einnig talið sem stafur.
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%