Format - định dạng chuỗi trong Python 3


Khi mới học lập trình Python tôi cảm thấy bối rối với việc xử lý xâu ký tự. Python còn cung cấp rất nhiều hàm, phương thức để việc xử lý được dễ dàng, đơn giản hơn. Điều đó cũng có nghĩa phải nhớ nhiều thứ hơn, rối rắm hơn. Việc định dạng một chuỗi cũng vậy, để định dạng một chuỗi bạn có thể dùng toán tử % hoặc có thể dùng hàm format().
Với toán tử %, nó khá giống với printf() trong C. Hãy thử xem ví dụ sau đây:
 >>> "%d...%d...%d...Say hello to %s!" % (1, 2, 3, 
"Simmon")
'1...2...3...Say hello to Simmon'

Bài viết này xin được đi sâu về hàm format(). Vì tôi thấy format() ưu việt hơn so với % và format() cũng làm được nhiều thứ hơn.

Cơ bản

Ví dụ trên chính là định dạng một chuỗi cơ bản. Định dạng chuỗi cơ bản là khi bạn chỉ thay thế các ký tự đặc biệt trong chuỗi bằng số khác, chuỗi khác. Với hàm format(): '...{}...'.format(value)
 >>> '{}...{}...{}...Say hello to {}!'.format(1,2,3,
'Simmon')
'1...2...3...Say hello to Simmon!'
Bạn cũng có thể đánh số cho các dấu {} như: {0}, {1}, {2},... python cũng như các ngôn ngữ khác bắt đầu đếm từ 0.
 >>> "{1} chào {0}!".format("Chi", "Anh Mạnh")
'Anh Mạnh chào Chi!'
Dễ hiểu đúng không! Ở ví dụ trên string "Chi" ở vị trí số 0 và "Anh Mạnh" ở vị trí số 1. "Anh Mạnh" thay thế vào {1} và "Chi" thay vào {0}. Đó chỉ đơn giản là thay thế.

Căn chỉnh chuỗi và chèn ký tự

Bạn có một chuỗi "Chi" gồm 3 ký tự nhưng bạn muốn trình bày chuỗi ấy trong 1 string 10 ký tự và các ký tự còn lại là space như thế này chẳng hạn
'   Chi    '
Bạn có thể viết như thế này:
 >>> "{:^10}".format("Chi")
'   Chi    '
Nếu bạn lần đầu đọc về format có thể sẽ hơi khó hiểu, tôi sẽ giải thích kỹ.
  1. Dấu ngoặc {} có tác dụng thay thế string "Chi" như trên.
  2. Dấu : thể hiện bạn đang thực hiện thao tác căn chỉnh. Đằng sau nó có thể có một con số hoặc các ký tự đặc biệt mà python quy ước sẵn. Tôi gọi là phép căn chỉnh.
  3. Dấu ^ là ký tự đặc biệt đó có tác dụng để chuỗi "Chi" đứng ở giữa đoạn string.
  4. Số 10, đơn giản bạn tạo ra string sẽ có 10 ký tự.
Trong phép căn chỉnh, bạn sẽ có các toán tử như sau:
Ký tự Tác dụng
< Căn lề bên trái
^ Căn giữa
> Căn lề bên phải
Nó đơn giản như thế này:
 >>> "{:<10}".format("Chi")
 >>> "{:10}".format("Chi")
'Chi       '
 >>> "{:>10}".format("Chi")
'       Chi'
Ở các ví dụ trên tôi đã chèn vào khoảng trống các ký tự space. Bạn cũng có thể thay thế ký tự space bằng cách thêm một ký tự khác ở phía trước phép căn chỉnh(bạn chỉ thêm được 1 ký tự) ở đây tôi thêm dấu "-":
 >>> "{:-<10}".format("Chi")
'Chi-------'
 >>> "{:a^10}".format("Chi")
'aaaChiaaaa'

Cắt chuỗi

Ngược lại với việc chèn thêm ký tự thì đó cắt xén bớt ký tự đi. Dùng dấu "." và một con số đứng sau, ví dụ bạn có một chuỗi 'Chiaaaaaaa' và bạn chỉ muốn lấy 4 ký tự đầu:
 >>> "{:.4}".format("Chi")
'Chia'
Tôi cũng có thể cắt chuỗi rồi sau đó chèn thêm vào chuỗi các ký tự khác như ở phần trên:
 >>> "{:^10.4}".format("Chi")
'   Chia   '
 >>> "{:x^20.4}".format("Chi")
'xxxxxxxxChiaxxxxxxxx'

Số học

Và đương nhiên ta hoàn toàn có thể format với số học
 >>> "{:d}".format(26)
'26'
 >>> "{:f}".format(26.06)
'26.060000'

Chuyển đổi qua lại giữa các hệ cơ số nhị phân(bin), bát phân(oct), thập phân(dec), thập lục phân(hex)

 >>> ( bin(267), oct(267), hex(267) )
('0b100001011', '0o413', '0x10b')
Bạn có thể chuyển từ hệ thập phân sang các hệ cơ số khác như vậy và tôi cũng sẽ giới thiệu thêm một cách nữa.
 >>> "{:b}, {:o}, {:d}, {:X}".format(267, 267, 267, 267 )
'100001011, 413, 267, 10B'
Lưu ý: hệ thập phân (dec) viết ký hiệu là d, hệ nhị phân(bin) ký hiệu là b, hệ bát phân(oct) ký hiệu là o nhưng hệ thập bát phân - hexa(hex) lại ký hiệu là chữ X.

Dấu dương, âm và làm tròn

Thêm một dấu cộng hay một dấu trừ khi format trong python cũng hơi khó hiểu một chút:
 >>> "{:+d}".format(267)
'+267'
 >>> "{:-d}".format(267)
'267'
 >>> "{:d}".format(-267)
'-267'
 >>> "{:+d}".format(-267)
'-267'
bạn cũng có thể chèn thêm khoảng trống hoặc làm tròn
 >>> "{:=+6d}".format(267)
'+  267'
 >>> "{:.4f}".format(267.575757)
'267.5758'
 >>> "{:=+10.2f}".format(267.575757)
'+    26.58'
Dấu "=" có tác dụng đặt dấu "+" lên đầu string, bạn hãy thử với trường hợp không có dấu bằng. Format trong python tôi sẽ còn đề cập trong bài viết sau!

Nhận xét

Bài đăng phổ biến từ blog này

ĐỖ ĐẠI HỌC – MỘT BƯỚC NGOẶT

Bạn ấy liệu có thích mình không?