Pemformatan (Formatting) Di Python

Python memiliki metode pemformatan (formatting) yang powerful. Ada dua cara atau style formatting di Python, ialah dengan style lama dan dengan style baru. Style lama menggunakan tanda persen %, sedangkan style gres menggunakan metode format(). Di artikel ini, Anda akan menjumpai formatting string dan bilangan lengkap yang mencakup penggunaan format cara lama dan gres disertai dengan pola – contohnya.





Tabel konten









Formatting Dasar



Formatting posisi kemungkinan yakni hal yang paling sering kita jumpai. Kita menggunakannya pada dikala urutan dari argumen tidak ingin diubah, dan hanya ada sedikit elemen yang akan digabungkan. Metode formatting ini cocoknya yakni untuk memformat elemen yang jumlahnya sedikit.















































Old'%s %s' % ('one', 'two')
New'{} {}'.format('one', 'two')
Outputone two
Old'%d %d' % (1, 2)
New'{} {}'.format(1, 2)
Output1 2


 



Dengan style performatan yang baru, kita mampu menggunakan indeks untuk mempertukarkan posisi dua buah penampung (placeholder). Contohnya yakni mirip berikut.



Operasi berikut tidak tersedia pada style formatting lama

















New'{1} {0}'.format('one', 'two')
Outputtwo one






Konversi Nilai



Style pemformatan yang gres secara default memanggil metode __format__() dari objek untuk ditampilkan. Jika kita hanya ingin menampilkan output dari str() atau repr(), kita mampu menggunakan flag konversi !s atau !r.



Pada style formatting lama, kita menggunakan %s untuk mewakili string, dan %r digunakan untuk metode repr()



Setup



class Data(object):
def __str__(self):
return 'str'
def __repr__(self):
return 'repr'






















Old'%s %r' % (Data(), Data())
New'{0!s} {0!r}'.format(Data())
Outputstr repr


 



Di Python 3, ada flag konversi komplemen yang menggunakan output dari repr() tapi menggunakan ascii()



Setup



class Data(object):
def __repr__(self):
return 'repr'






















Old'%r %a' % (Data(), Data())
New'{0!r} {0!a}'.format(Data())
Outputrepr r\xe4pr






Padding dan Perataan String



Normalnya, nilai yang diformat mengambil lebar sebanyak abjad yang akan direpresentasikannya. Akan tetapi, kita mampu mengatur sendiri berapa lebar yang kita inginkan.



Cara meratakan string berbeda antara style lama dan yang baru. Style yang lama defaultnya yakni rata kanan, sedangkan style gres defaultnya yakni rata kiri.



Rata kanan:























Old'%10s' % ('test',)
New'{:>10}'.format('test')
Output test


Rata kiri:























Old'%-10s' % ('test',)
New'{:10}'.format('test')
Outputtest


 



Style formatting yang gres memiliki beberapa fitur untuk mengatur bagaimana padding dan perataan dilakukan, ialah sebagai berikut:




  • Kita mampu menyesuaikan abjad padding



Operasi berikut tidak tersedia pada style formatting lama

















New'{:_<10}'.format('test')
Outputtest______



  • Kita mampu mengatur rata tengah



Operasi berikut tidak tersedia pada style formatting lama

















New'{:^10}'.format('test')
Output test



  • Selain itu, penggunaan rata tengah dimana panjang stringnya tidak tepat dibagi dua, maka abjad ekstra akan ditambahkan di sebelah kanan.



Operasi berikut tidak tersedia pada style formatting lama

















New'{:^6}'.format('zip')
Output zip






Pemotongan String Panjang



Berbeda dengan padding yang menambahkan lebar pada string, kita juga mampu melakukan pemotongan (truncating) untuk memotong jumlah abjad yang ada pada string.



Angka yang di belakang tanda . di dalam spesifikasi format digunakan untuk mengatur presisi dari output. Artinya string tersebut akan dipotong menjadi sepanjang angka tersebut.























Old'%.5s' % ('pythonindo',)
New'{:.5}'.format('pythonindo')
Outputpytho


Menggabungkan Pemotongan dan Padding



Kita juga mampu menggabungkan antara pemotongan dengan padding























Old'%-10.5s' % ('pythonindo',)
New'{:10.5}'.format('pythonindo')
Outputpytho






Bilangan



Kita juga mampu memformat bilangan mirip halnya string.



Integer:























Old'%d' % (42,)
New'{:d}'.format(42)
Output42


Float:























Old'%f' % (3.141592653589793,)
New'{:f}'.format(3.141592653589793)
Output3.141593






Padding Bilangan



Sama halnya dengan string, bilangan juga mampu dibuat dengan panjang tertentu.























Old'%4d' % (42,)
New'{:4d}'.format(42)
Output 42


Selain itu, bilangan juga mampu dipotong dengan jumlah desimal tertentu. Kita juga mampu menggabungkan antara pemotongan dengan padding. Untuk bilangan float, nilai padding memperlihatkan panjang dari total panjang output.



Pada pola berikut, kita menginginkan output terdiri dari 6 abjad dengan 2 angka di belakang koma.























Old'%06.2f' % (3.141592653589793,)
New'{:06.2f}'.format(3.141592653589793)
Output003.14


 



Pada integer, menambahkan presisi tidak akan memiliki kegunaan dan tidak dianjurkan pada style formatting yang gres (dapat menjadikan ValueError)























Old'%04d' % (42,)
New'{:04d}'.format(42)
Output0042






Bilangan Bertanda



Normalnya, bilangan negatif diawali dengan tanda. Tentu saja ini mampu diubahsuaikan sesuai dengan kebutuhan kita.























Old'%+d' % (42,)
New'{:+d}'.format(42)
Output+42


 



Penggunaan tanda spasi dalam format, dan tanda minus diikuti spasi di depan bilangan, digunakan untuk memperlihatkan bahwa bilangan tersebut yakni negatif.Sedangkan penggunaan tanda spasi tanpa diikuti tanda apapun, memperlihatkan bahwa bilangan tersebut yakni positif. Contohnya yakni mirip berikut.























Old'% d' % ((- 23),)
New'{: d}'.format((- 23))
Output-23






















Old'% d' % (42,)
New'{: d}'.format(42)
Output 42


 



Style formatting yang gres juga mampu mengatur posisi dari tanda relatif terhadap padding.



Operasi berikut tidak tersedia pada style formatting lama

















New'{:=5d}'.format((- 23))
Output- 23
















New'{:=+5d}'.format(23)
Output+ 23






Placeholder Bernama



Baik style formatting yang lama maupun yang baru, keduanya mendukung penampung (placeholder) bernama.



Setup



data = {'firts': 'Hello', 'last': 'Hello!'}























Old'%(first)s %(last)s' % data
New'{first} {last}'.format(**data)
OutputHello Hello!


 



Metode format() juga mendapat argumen kata kunci.



Operasi berikut tidak tersedia pada style formatting lama

















New'{first} {last}'.format(first='Hello', last='Hello!')
OutputHello Hello!






Getitem dan Getattr



Style formatting yang gres memperlihatkan fleksibilitas untuk mengakses struktur data bercabang. Style ini mendukung pengaksesan dictionary maupun list.



Operasi berikut tidak tersedia pada style formatting lama



Setup



person = {'firts': 'Budi', 'last': 'Santoso'}

















New'{p[first]} {p[last]}'.format(p=person)
OutputBudi Santoso


 



Setup



data = [4, 8, 15, 17, 20, 45]

















New'{d[4]} {d[5]}'.format(d=data)
Output20 45


Kita juga mampu mengakses objek via getattr()



Operasi berikut tidak tersedia pada style formatting lama



Setup



class Plant(object):
type = 'tree'
















New'{p.type}'.format(p=Plant())
Outputtree


 



Operasi berikut tidak tersedia pada style formatting lama



Setup



class Plant(object):
type = 'tree'
kinds = [{'name': 'mahoni'}, {'name': 'apel'}]
















New'{p.type}: {p.kinds[0][name]}'.format(p=Plant())
Outputtree: mahoni






Datetime



Style formatting yang gres juga mampu digunakan untuk memformat objek mirip datetime. Datetime ini yakni objek Python yang berhubungan dengan waktu dan tanggal.



Operasi berikut tidak tersedia pada style formatting lama



Setup



from datetime import datetime

















New'{:%Y-%m-%d %H:%M}'.format(datetime(2017, 8, 3, 4, 5))
Output2017-08-03 04:05






Format Berparameter



Kita juga mampu memasukkan spesifikasi format yang kita inginkan di dalam metode format(). Format berparameter di letakkan di dalam tanda kurung kurawal setelah tanda titik dua.



Style lama juga mendukung parameterisasi, tapi terbatas hanya untuk mengatur lebar dan presisi dari output.



Operasi berikut tidak tersedia pada style formatting lama

















New'{:{align}{width}}'.format('test', align='^', width='10')
Output test



  • Menggunakan parameter presisi























Old'%.*s = %.*f' % (3, 'Eksponen', 3, 2.7182)
New'{:.{prec}} = {:.{prec}f}'.format('Eksponen', 2.7182, prec=3)
OutputEks = 2.718



  • Menggunakan parameter lebar dan presisi























Old'%*.*f' % (5, '2', 2.7182)
New'{:.{width}.{prec}f}'.format(2.7182, width=5, prec=3)
Output = 2.72


 



Format bersarang mampu digunakan untuk menggantikan sembarang belahan dari spesifikasi format. Oleh sebab itu, pola di atas mampu ditulis ulang dengan cara berikut:



Operasi berikut tidak tersedia pada style formatting lama

















New'{:{prec}} = {:{prec}}'.format('Eksponen', 2.7182, prec='.3')
OutputEks = 2.72


 



Komponen – komponen datetime juga mampu ditulis terpisah.



Operasi berikut tidak tersedia pada style formatting lama



Setup



from datetime import datetime
dt = datetime(2017, 8, 3, 4, 5)
















New'{:{dfmt} {tfmt}}'.format(dt, dfmt='%Y-%m-%d', tfmt='%H:%M')
Output2017-08-03 04:05


 



Format bersarang mampu digunakan sebagai argumen posisi. Posisi tergantung pada urutan dari tanda kurung kurawal.



Operasi berikut tidak tersedia pada style formatting lama

















New'{:{}{}{}.{}}'.format(2.7182818284, '>', '+', 10, 3)
Output +2.72


 



Argumen kata kunci juga mampu dicampur ke dalam format

















New'{:{}{sign}{}.{}}'.format(2.7182818284, '>', 10, 3, sign='+')
Output +2.72






Objek Kustomasi



Contoh di atas yang menggunakan metode magic __format__() pada objek di Python. Kita mampu mendefinisikan sendiri format untuk menangani objek yang kita buat untuk menangani metode __format__() ini. Dengan begitu, kita mampu mengatur sintaks yang digunakan.



Setup



class HAL9000(object):

def __format__(self, format):
if (format == 'open-the-pod-bay-doors'):
return "I'm afraid I can't do that."
return 'HAL9000'
















New'{:open-the-pod-bay-doors}'.format(HAL9000())
OutputI'm afraid I can't do that.



Source: pyformat.info



Popular posts from this blog

Subitems Listview Berwarna Selang Seling

Source Code Aplikasi Tagihan Internet Memakai Php