Memformat angka menjadi string dengan Python

112

Saya perlu mencari tahu cara memformat angka sebagai string. Kode saya ada di sini:

return str(hours)+":"+str(minutes)+":"+str(seconds)+" "+ampm

Jam dan menit adalah bilangan bulat, dan detik adalah pelampung. fungsi str () akan mengubah semua angka ini menjadi tempat persepuluhan (0.1). Jadi bukannya string saya mengeluarkan "5: 30: 59.07 pm", itu akan menampilkan sesuatu seperti "5.0: 30.0: 59.1 pm".

Intinya, perpustakaan / fungsi apa yang saya perlukan untuk melakukan ini untuk saya?

David Ackerman
sumber

Jawaban:

138

Dimulai dengan Python 3.6, pemformatan dengan Python dapat dilakukan menggunakan literal string atau f-string yang diformat :

hours, minutes, seconds = 6, 56, 33
f'{hours:02}:{minutes:02}:{seconds:02} {"pm" if hours > 12 else "am"}'

atau str.formatfungsi yang dimulai dengan 2.7:

"{:02}:{:02}:{:02} {}".format(hours, minutes, seconds, "pm" if hours > 12 else "am")

atau operator pemformatan string% untuk versi Python yang lebih lama, tetapi lihat catatannya di dokumen:

"%02d:%02d:%02d" % (hours, minutes, seconds)

Dan untuk kasus spesifik Anda tentang waktu pemformatan, ada time.strftime:

import time

t = (0, 0, 0, hours, minutes, seconds, 0, 0, 0)
time.strftime('%I:%M:%S %p', t)
Konrad Rudolph
sumber
96

Mulai Python 2.6, ada alternatif: str.format()metode. Berikut adalah beberapa contoh menggunakan operator format string yang sudah ada ( %):

>>> "Name: %s, age: %d" % ('John', 35) 
'Name: John, age: 35' 
>>> i = 45 
>>> 'dec: %d/oct: %#o/hex: %#X' % (i, i, i) 
'dec: 45/oct: 055/hex: 0X2D' 
>>> "MM/DD/YY = %02d/%02d/%02d" % (12, 7, 41) 
'MM/DD/YY = 12/07/41' 
>>> 'Total with tax: $%.2f' % (13.00 * 1.0825) 
'Total with tax: $14.07' 
>>> d = {'web': 'user', 'page': 42} 
>>> 'http://xxx.yyy.zzz/%(web)s/%(page)d.html' % d 
'http://xxx.yyy.zzz/user/42.html' 

Berikut adalah cuplikan yang setara tetapi menggunakan str.format():

>>> "Name: {0}, age: {1}".format('John', 35) 
'Name: John, age: 35' 
>>> i = 45 
>>> 'dec: {0}/oct: {0:#o}/hex: {0:#X}'.format(i) 
'dec: 45/oct: 0o55/hex: 0X2D' 
>>> "MM/DD/YY = {0:02d}/{1:02d}/{2:02d}".format(12, 7, 41) 
'MM/DD/YY = 12/07/41' 
>>> 'Total with tax: ${0:.2f}'.format(13.00 * 1.0825) 
'Total with tax: $14.07' 
>>> d = {'web': 'user', 'page': 42} 
>>> 'http://xxx.yyy.zzz/{web}/{page}.html'.format(**d) 
'http://xxx.yyy.zzz/user/42.html'

Seperti Python 2.6+, semua rilis Python 3 (sejauh ini) memahami cara melakukan keduanya. Saya tanpa malu-malu merobek hal-hal ini langsung dari buku intro Python hardcore saya dan slide untuk kursus Intro + Intermediate Python yang saya tawarkan dari waktu ke waktu.:-)

Agustus 2018 UPDATE : Tentu saja, sekarang kita memiliki fitur f-string dalam 3,6 , kita perlu contoh setara dengan yang , ya alternatif lain:

>>> name, age = 'John', 35
>>> f'Name: {name}, age: {age}'
'Name: John, age: 35'

>>> i = 45
>>> f'dec: {i}/oct: {i:#o}/hex: {i:#X}'
'dec: 45/oct: 0o55/hex: 0X2D'

>>> m, d, y = 12, 7, 41
>>> f"MM/DD/YY = {m:02d}/{d:02d}/{y:02d}"
'MM/DD/YY = 12/07/41'

>>> f'Total with tax: ${13.00 * 1.0825:.2f}'
'Total with tax: $14.07'

>>> d = {'web': 'user', 'page': 42}
>>> f"http://xxx.yyy.zzz/{d['web']}/{d['page']}.html"
'http://xxx.yyy.zzz/user/42.html'
wescpy
sumber
8

Python 2.6+

Dimungkinkan untuk menggunakan format()fungsi tersebut, jadi dalam kasus Anda, Anda dapat menggunakan:

return '{:02d}:{:02d}:{:.2f} {}'.format(hours, minutes, seconds, ampm)

Ada beberapa cara untuk menggunakan fungsi ini, jadi untuk informasi lebih lanjut Anda dapat memeriksa dokumentasinya .

Python 3.6+

f-strings adalah fitur baru yang telah ditambahkan ke bahasa di Python 3.6. Ini memfasilitasi format string yang terkenal:

return f'{hours:02d}:{minutes:02d}:{seconds:.2f} {ampm}'
lmiguelvargasf
sumber
1

Anda dapat menggunakan berikut ini untuk mencapai fungsionalitas yang diinginkan

"%d:%d:d" % (hours, minutes, seconds)
Varun Chadha
sumber
1

Anda bisa menggunakan str.format () untuk membuat Python mengenali objek apa pun menjadi string.

HamTheBurger
sumber
0

str () dengan python pada integer tidak akan mencetak tempat desimal apapun.

Jika Anda memiliki float yang ingin Anda abaikan bagian desimalnya, maka Anda dapat menggunakan str (int (floatValue)).

Mungkin kode berikut akan menunjukkan:

>>> str(5)
'5'
>>> int(8.7)
8
Matthew Schinckel
sumber
0

Jika Anda memiliki nilai yang menyertakan desimal, tetapi nilai desimal dapat diabaikan (yaitu: 100.0) dan mencoba untuk melakukannya, Anda akan mendapatkan kesalahan. Tampaknya konyol, tetapi memanggil float terlebih dahulu memperbaiki ini.

str (int (float ([variabel])))

Ruz
sumber