Konversi format ing Python, format (isi nol, notasi eksponensial, heksadesimal, lsp.)

Bisnis

Kanggo ngowahi (format) nomer utawa senar menyang macem-macem format ing Python, nggunakake dibangun ing format fungsi () utawa cara senar str.format ().

Ing bagean iki, kita bakal nerangake carane nggunakake fungsi ing ngisor iki.

  • fungsi built-in (contone ing basa pemrograman)format()
  • metode stringstr.format()

Kajaba iku, string spesifikasi format kanggo ngowahi menyang format ing ngisor iki diterangake kanthi kode sampel.

  • Kiri-justified, Center-justified, tengen-justified
  • nul isi
  • Tandha (plus utawa minus)
  • Pemisah digit (koma, garis ngisor)
  • Angka biner, oktal, lan heksadesimal
  • Nemtokake nomer digit sawise titik desimal
  • Angka penting (jumlah angka penting)
  • notasi eksponensial
  • Tampilan persentasi

Elinga yen wiwit Python 3.6, f-strings (f-strings) wis ditambahake kanggo cara senar str.format () kanggo nggawe luwih ringkes.

Fungsi internal: format()

format () kasedhiya minangka Python standar dibangun ing fungsi.

Garise kaya ing ngisor iki.

  • format(value, format_spec)
    • Argumentasi pisanan: ingvalue
      Nilai asline. String str, angka int, float, etc.
    • Argumentasi kapindhoformat_spec
      Format string spesifikasi. String str
    • Nilai bali: string format str

Conto kapacak ing ngisor iki. Jinis format strings lan carane nulis mau bakal diterangake mengko.

Ing conto iki, kita wis nggunakake literal numerik lan literal string minangka argumen pisanan, nanging mesthi sampeyan bisa nggunakake variabel sing ngemot nilai kasebut.

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

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

String metode str.format()

Ana uga cara format () kanggo jinis string str.

{} ing string str sing nelpon format () cara disebut lapangan substitusi, lan diganti dening argumen saka format () cara.

String spesifikasi format kudu ditulis ing kolom substitusi {} diikuti “:”.

Nilai bali minangka format string str.

Proses padha karo dibangun ing format fungsi () diterangake ing ndhuwur minangka nderek.

s = '{:04x}'.format(255)
print(s)
print(type(s))
# 00ff
# <class 'str'>

print('{:*^16}'.format('center'))
# *****center*****

Maneh, kita nggunakake literal numerik lan literal string minangka argumen, nanging mesthi variabel uga bisa ditampa.

Nemtokake argumen kanggo kolom substitusi

Nemtokake argumen kanthi urutan (standar)

Bisa uga ana sawetara kolom substitusi {}, lan minangka standar, argumen metode diproses kanthi urut. Yen string spesifikasi format ing {} diilangi, iku mung bakal diowahi dadi string dening str ().

Migunani kanggo nglebokake nilai variabel ing senar lan nyithak.

print('{}-{}-{}'.format('100', '二百', 300))
# 100-二百-300

Nemtokake argumen posisi kanggo nilai integer

Yen nilai integer ditemtokake ing {}, kayata {0} utawa {1}, output bakal gumantung saka urutan argumen. Nomer sing padha bisa digunakake bola-bali. Iki migunani yen sampeyan pengin nglebokake nilai sing padha ing senar.

print('{0}-{1}-{0}'.format('foo', 'bar'))
# foo-bar-foo

Nemtokake argumen tembung kunci kanggo jeneng sewenang-wenang (string)

Sampeyan uga bisa nemtokake jeneng apa wae ing {} lan ngetik minangka argumen tembung kunci.

print('{day}/{month}/{year}/'.format(day=11, month=1, year=2018))
# 11/1/2018

Nemtokake dhaptar utawa kamus minangka argumen

Dhaptar lan kamus bisa ditemtokake minangka argumen.

Gunakake [] kanggo nemtokake indeks dhaptar utawa kunci kamus ing kolom substitusi. Elinga yen tandha petik “‘” lan “” ora digunakake kanggo nemtokake kunci kamus.

Yen sampeyan pengin nggunakake argumen sing padha bola-bali, sampeyan kudu nemtokake nilai integer utawa senar (jeneng) kaya sing kasebut ing ndhuwur.

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.

Bisa ditambahi minangka argumen posisi kanthi nambah * menyang dhaptar lan nemtokake minangka argumen, utawa minangka argumen tembung kunci kanthi nambah ** menyang kamus lan nemtokake minangka argumen.

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.

Deskripsi kurung kriting {}

Yen sampeyan pengin nulis kurung kriting {,} ing cara format (), baleni kaping pindho kaya {{,}}. Elinga yen backslash ora bisa uwal.

print('{{}}-{num}-{{{num}}}'.format(num=100))
# {}-100-{100}

string sing diformat

Ing kasus loro, kanggo nemtokake format, tulis “: format string” sawise nilai integer utawa jeneng string ing {}.

print('{num:x}'.format(num=255))
# ff

print('{day}/{month:02}/{year:02}/'.format(day=11, month=1, year=2018))
# 11/01/2018

Ing ngisor iki, kita bakal nerangake carane nemtokake format nggunakake string format. Kode sampel nggunakake cara senar str.format (), nanging senar format padha bisa digunakake karo dibangun ing format fungsi (). Ing format fungsi dibangun ing (), string specification format kasebut minangka argumen kapindho.

Kiri-justified, Center-justified, tengen-justified

Sampeyan bisa nyelarasake sisih kiwa-justified, tengah-justified, tengen-justified, etc. ing ngisor iki. Nemtokake jumlah total karakter minangka nomer.

  • <
  • ^
  • >
print('left  : {:<10}'.format(100))
print('center: {:^10}'.format(100))
print('right : {:>10}'.format(100))
# left  : 100       
# center:    100    
# right :        100

Sampeyan uga bisa nemtokake karakter sing bakal diisi. Yen diilangi, kaya ing conto ing ndhuwur, iku spasi.

Sampeyan bisa nggunakake karakter pindho bait anggere iku karakter siji.

print('left  : {:*<10}'.format(100))
print('center: {:a^10}'.format(100))
print('right : {:鬼>10}'.format(100))
# left  : 100*******
# center: aaa100aaaa
# right : 鬼鬼鬼鬼鬼鬼鬼100

Kabeneran tengen karo & gt; ora nggatekake tandha (-+). Yen sampeyan nggunakake =, tandha ngiring dening karakter kasebut. Yen sampeyan pengin nemtokake +, tulis + sawise =. Rincian pangolahan tandha diterangake mengko.

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

<, ^, lan > bisa ditemtokake kanggo strings, nanging = bakal nyebabake kesalahan ValueError. Yen sampeyan pengin nggunakake = kanggo senar, sampeyan kudu ngowahi menyang nomer nggunakake int ().

# print('sign: {:0=10}'.format('-100'))
# ValueError: '=' alignment not allowed in string format specifier

print('sign: {:0=10}'.format(int('-100')))
# sign: -000000100

Padha ditrapake kanggo nomer floating-titik. Titik desimal uga dianggep minangka karakter.

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

Dhaptar, tuples, etc.. bakal nimbulaké kesalahan yen kasebut minangka-iki, lan bisa diowahi kanggo strings nggunakake 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]*****

Kanggo kiwa-justified, tengah-justified, lan tengen-justified, ana uga cara senar darmabakti disebut ljust (), tengah (), lan rjust ().

0 ngisi

Yen sampeyan pengin nyetel jumlah digit kanthi nul-Isi, nyetel karakter kanggo kapenuhan 0 lan tengen-mbenerake.

Ing kasus zero-filling, yen simbol keselarasan diilangi, diproses kaya-kaya = wis ditemtokake.

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

#KESALAHAN!

# print('zero padding: {:010}'.format('-100'))
# ValueError: '=' alignment not allowed in string format specifier

Kanggo nul-Isi, ana uga cara senar khusus disebut zfill ().

Tandha (plus utawa minus)

Kanthi gawan, mung nomer negatif ditandhani karo tandha (minus-).

Nalika + ditambahake menyang string spesifikasi format, tandha (plus +) uga ditampilake kanggo nomer positif. Yen spasi ditambahake, spasi ditampilake ing wiwitan nomer positif, lan nomer digit didadekake siji karo nomer negatif.

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

Ati-ati nalika ngisi karakter sembarang, kayata nol-isi kasebut ing ndhuwur. Standar, tanpa + lan ora ana spasi, ngisi angka positif kanthi karakter liyane.

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

Yen simbol keselarasan digunakake, simbol sebutan tandha kudu ditulis sawise simbol keselarasan.

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

Pemisah digit (koma, garis ngisor)

Tambah koma utawa garis ngisor _ separator saben telung digit. Iki nggawe nomer akeh luwih gampang diwaca. Elinga yen underscore_ minangka pilihan sing ditambahake ing Python 3.6, saengga ora bisa digunakake ing versi sadurunge.

print('{:,}'.format(100000000))
# 100,000,000

print('{:_}'.format(100000000))
# 100_000_000

Ing kasus jinis floating-point number float, mung bagean integer sing diwatesi.

print('{:,}'.format(1234.56789))
# 1,234.56789

Angka biner, oktal, lan heksadesimal

Ngonversi nilai numerik menyang angka biner, octal, lan heksadesimal kanggo output.

  • b: Binar
  • o: Oktal
  • d: Desimal
  • x,X: Heksadesimal (huruf gedhe dikapitalisasi)
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

Bisa uga digabung karo 0-fill, lan asring digunakake kanggo nyelarasake digit ing notasi biner lan heksadesimal.

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

Elinga yen nomer karakter isi-nol kudu ditemtokake kanthi prefiks.

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

Kanggo nomer binar lan heksadesimal, mung bisa dilebokake pemisah _ digit garis ngisor (Python 3.6 utawa luwih anyar). 4-digit separator digunakake; nomer karakter nul-nepsu uga kudu njupuk menyang akun nomer underscores.

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

Mung jinis integer int sing bisa ngowahi format kasebut dadi binar utawa heksadesimal. Sampeyan bisa nggunakake int () Ngonversi menyang nomer.

# print('hex: {:08x}'.format('255'))
# ValueError: Unknown format code 'X' for object of type 'str'

print('hex: {:08x}'.format(int('255')))
# hex: 000000ff

Nemtokake nomer digit sawise titik desimal

Kanggo nemtokake jumlah digit sawise titik desimal, tindakake ing ngisor iki: n minangka nomer digit. Jumlah digit sawise titik desimal dadi nomer tartamtu saka digit preduli saka nomer digit ing bagean integer.
.[n]f

print('{:.2f}'.format(123.456))
print('{:.5f}'.format(123.456))
print('{:.3f}'.format(0.0001234))
# 123.46
# 123.45600
# 0.000

Sisih kiwa titik desimal bisa ditemtokake minangka dibenerake kiwa, dibenerake tengah, dibenerake tengen, utawa diisi nol kaya sing kasebut ing ndhuwur. Yen jumlah digit nilai target luwih saka nomer sing ditemtokake, ora ana sing ditindakake. Yen jumlah digit ing nilai target luwih gedhe tinimbang jumlah digit sing ditemtokake, ora ana sing ditindakake.

print('{:>12.5f}'.format(123.456))
print('{:012.5f}'.format(123.456))
print('{:06.5f}'.format(123.456))
#    123.45600
# 000123.45600
# 123.45600

Yen sampeyan nemtokake jumlah digit kurang saka nomer asli digit sawise titik desimal, Nilai bakal dibunderaké. Elinga yen iki ora dibunderaké kanggo kabèh nomer paling cedhak, nanging kanggo nomer genap, f.eks. 0.5 dibunderaké dadi 0.

print('{:.0f}'.format(0.4))
print('{:.0f}'.format(0.5))
print('{:.0f}'.format(0.6))
# 0
# 0
# 1

Yen sampeyan pengin nggunakake rounding umum, sampeyan bisa nggunakake cara quantize () saka desimal perpustakaan standar.

notasi eksponensial

Nalika nomer floating-point float diowahi dadi string str, bakal kanthi otomatis ditulis ing notasi eksponensial gumantung ing nomer digit. Integer jinis int ora.

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

Yen sampeyan nemtokake e utawa E ing string spesifikasi format, sampeyan bisa tansah ngowahi menyang notasi eksponensial. Karakter sing digunakake ing output bakal dadi e lan E.

print('{:e}'.format(0.0001234))
print('{:E}'.format(0.0001234))
# 1.234000e-04
# 1.234000E-04

Sampeyan uga bisa nemtokake nomer digit sawise titik desimal. Bagean integer bakal dadi siji digit lan titik desimal bakal dadi nomer digit sing ditemtokake.

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

Elinga yen sampeyan nemtokake kiwa-justified, center-justified, tengen-justified, utawa zero-filled, e-, E+, etc. uga bakal diitung minangka digit (karakter).

print('{:>12.5e}'.format(987.65))
print('{:012.2E}'.format(987.65))
#  9.87650e+02
# 00009.88E+02

Angka penting (jumlah angka penting)

Sampeyan bisa nemtokake nomer sakabèhé digit kanthi nindakake ing ngisor iki Gumantung saka asil, notasi eksponensial bakal digunakake kanthi otomatis. Elinga yen nol mburi sawise titik desimal bakal diilangi.
.[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

Yen sampeyan ngilangi g, output ora bakal dadi integer. g padha ing paling kasus, nanging mung ing kasus endi output integer.

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

Yen kita ngolah nilai sing padha, kita entuk ing ngisor iki.

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

Ing kasus g utawa yen diilangi, nul mburine sawise titik desimal diilangi, dadi yen sampeyan pengin ngasilake angka penting sing padha (jumlah digit penting), gunakake notasi eksponensial e utawa E. part integer tansah siji digit lan titik desimal punika nomer tartamtu saka digit, supaya yen sampeyan pengin output n digit wujud, mung nemtokake 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

Tampilan persentasi

Yen % ditemtokake ing string spesifikasi format, nilai float numerik utawa int dikalikan karo 100 lan diowahi dadi string kanthi %.

Sampeyan uga bisa nemtokake nomer digit sawise titik desimal. Default yaiku enem digit sawise titik desimal. Ngiwa-mbenerake, tengah-mbenerake, tengen-mbenerake, lan nul-isi uga kasedhiya. % uga dianggep minangka karakter.

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