Định dạng số thành chuỗi trong Python


112

Tôi cần tìm hiểu cách định dạng số dưới dạng chuỗi. Mã của tôi ở đây:

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

Giờ và phút là số nguyên và giây là số thực. hàm str () sẽ chuyển đổi tất cả các số này thành vị trí phần mười (0,1). Vì vậy, thay vì chuỗi của tôi xuất ra "5: 30: 59.07 pm", nó sẽ hiển thị một cái gì đó như "5.0: 30.0: 59.1 pm".

Tóm lại, tôi cần thư viện / chức năng nào để thực hiện việc này?

Câu trả lời:


138

Bắt đầu với Python 3.6, việc định dạng trong Python có thể được thực hiện bằng cách sử dụng chuỗi ký tự được định dạng hoặc chuỗi f :

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

hoặc str.formathàm bắt đầu bằng 2.7:

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

hoặc toán tử định dạng chuỗi% cho các phiên bản Python cũ hơn, nhưng hãy xem ghi chú trong tài liệu:

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

Và đối với trường hợp cụ thể của bạn về thời gian định dạng, có time.strftime:

import time

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

96

Bắt đầu bằng Python 2.6, có một phương pháp thay thế: str.format()phương thức. Dưới đây là một số ví dụ sử dụng toán tử định dạng chuỗi hiện có ( %):

>>> "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' 

Dưới đây là các đoạn mã tương đương nhưng sử dụng 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'

Giống như Python 2.6+, tất cả các bản phát hành Python 3 (cho đến nay) đều hiểu cách thực hiện cả hai. Tôi không biết xấu hổ đã trích xuất nội dung này ra khỏi cuốn sách giới thiệu Python khó tính của mình và các trang trình bày cho các khóa học Python Intro + Trung cấp mà tôi cung cấp theo thời gian.:-)

CẬP NHẬT tháng 8 năm 2018 : Tất nhiên, bây giờ chúng ta đã có tính năng f-string trong 3.6 , chúng ta cần các ví dụ tương đương về điều đó , có một sự thay thế khác:

>>> 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'

8

Python 2.6+

Có thể sử dụng format()chức năng, vì vậy trong trường hợp của bạn, bạn có thể sử dụng:

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

Có nhiều cách sử dụng chức năng này, vì vậy để biết thêm thông tin, bạn có thể kiểm tra tài liệu .

Python 3.6+

f-string là một tính năng mới đã được thêm vào ngôn ngữ trong Python 3.6. Điều này tạo điều kiện thuận lợi cho việc định dạng các chuỗi nổi tiếng:

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


1

Bạn có thể sử dụng sau để đạt được chức năng mong muốn

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

1

Bạn có thể sử dụng str.format () để làm cho Python nhận ra bất kỳ đối tượng nào thành chuỗi.


0

str () trong python trên một số nguyên sẽ không in bất kỳ vị trí thập phân nào.

Nếu bạn có một float mà bạn muốn bỏ qua phần thập phân, thì bạn có thể sử dụng str (int (floatValue)).

Có lẽ đoạn mã sau sẽ chứng minh:

>>> str(5)
'5'
>>> int(8.7)
8

0

Nếu bạn có một giá trị bao gồm một số thập phân, nhưng giá trị thập phân không đáng kể (ví dụ: 100.0) và cố gắng nhập giá trị đó, bạn sẽ gặp lỗi. Nó có vẻ ngớ ngẩn, nhưng việc gọi float đầu tiên sẽ khắc phục được điều này.

str (int (float ([biến])))

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.