Computer >> Máy Tính >  >> Lập trình >> Python

Làm cách nào để nội suy giá trị dữ liệu thành chuỗi trong Python?

Chúng ta có thể nội suy các giá trị dữ liệu thành các chuỗi bằng nhiều định dạng khác nhau. Chúng tôi có thể sử dụng điều này để gỡ mã, tạo báo cáo, biểu mẫu và các kết quả đầu ra khác. Trong chủ đề này, chúng ta sẽ xem ba cách định dạng chuỗi và cách nội suy các giá trị dữ liệu thành chuỗi.

Python có ba cách định dạng chuỗi:

  • % - old school (được hỗ trợ trong Python 2 và 3)

  • () - kiểu mới (Python 2.6 trở lên)

  • {} - f-string (Python 3.6 trở lên)

Kiểu cũ:%

Kiểu định dạng chuỗi cũ có dữ liệu dạng format_string%. Các chuỗi định dạng không là gì ngoài các chuỗi nội suy.

Cú pháp chuỗi

mô tả
% s

% d
thập phân
% x
hexa-int
% o
bát phân-int
% f
decimal-float
% e
exponential-float
% g
thập phân hoặc theo cấp số nhân-float
%%
đen%


 # print integer với% style type.print ('output \ nprinting a number in string format% s'% 42) print ('in a number in string decimal% d'% 42) print ('in a number in string hexa-int% x '% 42) print (' in một số trong chuỗi exponential-float% g '% 42) 

Đầu ra

 in một số ở định dạng chuỗi 42 in một số dưới dạng chuỗi thập phân 42 in một số trong chuỗi hexa-int 2 in một số trong chuỗi exponential-float 42 

Nội suy chuỗi và số nguyên với định dạng cũ%

% S bên trong chuỗi có nghĩa là để nội suy một chuỗi. Số% xuất hiện trong chuỗi cần phải khớp với số mục dữ liệu sau% theo sau chuỗi.

Một mục dữ liệu duy nhất thực hiện ngay sau% cuối cùng đó. Nhiều dữ liệu phải được nhóm thành một bộ, xem ví dụ bên dưới.

Bạn cũng có thể thêm các giá trị khác trong chuỗi định dạng giữa% và mã định dạng loại để chỉ định độ rộng tối thiểu và tối đa, căn chỉnh và điền ký tự.

 1. + có nghĩa là căn phải2. - có nghĩa là căn trái3. . có nghĩa là băng thông tối thiểu và tối đa riêng biệt. tối thiểu nghĩa là chiều rộng trường mimimu để sử dụng5. maxchars nghĩa là có bao nhiêu ký tự / chữ số để in từ giá trị dữ liệu 


 player ='Roger Federer'country =' Legend'titles =20 # lưu ý, vui lòng chỉ thử điều này trên Python 2. Nếu bạn đang chạy trên đầu ra Python3 cho các lệnh dưới đây sẽ thay đổi rất nhiều .print ('Đầu ra \ n ** * Người chơi quần vợt% s Từ% s đã giành được% d danh hiệu '% (người chơi, quốc gia, danh hiệu)) print ('% s '% player) # print playerprint ('% 5s '% player) # print firstname of playerprint (' % -7s '% player) # Họ của người chơi ('% 5.7s '% player) # Họ của người chơi có 5 dấu cách ở đầu 

Đầu ra

 *** Tay vợt huyền thoại Roger Federer đã giành được 20 danh hiệu 

Nội suy chuỗi và số nguyên với Kiểu mới:{}

Nếu bạn đang sử dụng phiên bản Python 3.5 trở lên, bạn có thể sử dụng định dạng "kiểu mới" được mô tả trong phần bên dưới.

Định dạng “{}” có cú pháp là format_string.format (dữ liệu).

Hãy nhớ rằng, các đối số cho hàm format () cần phải theo thứ tự như {} trình giữ chỗ trong chuỗi định dạng.

 player ='Roger Federer'player =' Roger_Federer'country ='Legend'titles =20print (' Output \ n {} '. format (player)) print (' *** Tennis player {} From {} had đã giành được {} danh hiệu '.format (người chơi, quốc gia, danh hiệu)) # positonal objectssprint (' *** Tay vợt quần vợt {1} Từ {2} đã giành được {0} danh hiệu '.format (danh hiệu, người chơi, quốc gia)) # có tên là đối số ('*** Người chơi quần vợt {player} Đến từ {country} đã giành được {title} danh hiệu' .format (player ='Roger Federer', country ='Legend', title =20)) # Dictionary objectsprint ('* ** Người chơi quần vợt {player} đến từ {country} đã giành được {title} danh hiệu '.format (player =' Roger Federer ', country =' Legend ', title =20)) # alignment left' <'(default) print ( '*** Người chơi quần vợt {} Từ {:<5s} đã giành được {:<5d} danh hiệu' .format (người chơi, quốc gia, danh hiệu)) # alignment left '<' (mặc định) print ('*** Người chơi quần vợt {} Từ {:<5s} đã giành được {:<5d} danh hiệu '.format (người chơi, quốc gia, danh hiệu)) # alignment center' ^ 'print (' *** Người chơi quần vợt {} Từ {:^ 10s} đã có won {:^ 10d} title '.format (player, country, title s)) # alignment right '>' print ('*** Người chơi quần vợt {} Từ {:> 10s} đã giành được {:> 10d} danh hiệu' .format (người chơi, quốc gia, danh hiệu)) 


Đầu ra

 Roger_Federer *** Tay vợt Roger_Federer From Legend đã giành được 20 danh hiệu *** Tay vợt Roger_Federer From Legend đã giành được 20 danh hiệu *** Tay vợt Roger Federer From Legend đã giành được 20 danh hiệu *** Tay vợt Roger Federer From Legend đã giành được 20 danh hiệu *** Tay vợt Roger_Federer From Legend đã giành được 20 danh hiệu *** Tay vợt Roger_Federer From Legend đã giành được 20 danh hiệu *** Tay vợt Roger_Federer From Legend đã giành được 20 danh hiệu *** Tay vợt Roger_Federer From Legend đã giành được chiến thắng 20 đầu sách 

Nội suy chuỗi và số nguyên với kiểu mới nhất:f-string

f-string đã xuất hiện trong Python 3.6 và sớm trở thành cách định dạng chuỗi được khuyến nghị. Cá nhân tôi, sử dụng định dạng này. Để tạo chuỗi f:

1. Sử dụng chữ cái f / F trước dấu ngoặc kép bắt đầu / đầu tiên.
2. Bao gồm tên biến hoặc biểu thức trong dấu ngoặc nhọn ({}) để nhận giá trị của chúng vào chuỗi.

 player ='Roger_Federer'country =' Legend'titles =20print (f "Output \ n *** Tay vợt {player} Từ {country} đã giành được {title} danh hiệu") print (f "*** I hy vọng {player} thắng thêm {title - 10} title ") print (f" {'*' * 3} Người chơi quần vợt {player.upper ()} Đến từ {country:. ^ 10} đã giành được {title} title ") 

Đầu ra

 *** Tay vợt Roger_Federer From Legend đã giành được 20 danh hiệu *** Tôi hy vọng Roger_Federer sẽ giành được 10 danh hiệu nữa *** Tay vợt ROGER_FEDERER đến từ ..Legend .. đã giành được 20 danh hiệu 

Bây giờ chúng ta đã đề cập đến những điều cơ bản, hãy cùng tìm hiểu một số vấn đề về thời gian thực và lý do tại sao tôi khuyên bạn nên bắt đầu sử dụng chuỗi được Định dạng.

 title =[('federer', 20), ('nadal', 20), ('djokovic', 17),] print ('Output \ n') for i, (player, title) in enumerate ( title):print ('#% d:% -10s =% d'% (i + 1, player.title (), round (title))) 

Đầu ra

 # 0:federer =20 # 1:nadal =20 # 2:djokovic =17 

Rõ ràng, khi cử một đại diện lên cao hơn sẽ không muốn nhìn thấy chỉ số bắt đầu từ 0, họ muốn bắt đầu ở mức 1. / P>

Bây giờ để thực hiện thay đổi đó, hãy xem khả năng đọc được của mã thay đổi như thế nào khi sử dụng các định dạng cũ hơn.

 title =[('federer', 20), ('nadal', 20), ('djokovic', 17),] print ('Output \ n') for i, (player, title) in enumerate ( title):print ('#% d:% -10s =% d'% (i + 1, player.title (), round (title))) 

Đầu ra

 # 1:Federer =20 # 2:Nadal =20 # 3:Djokovic =17 

Để kết thúc, tôi đã cung cấp một ví dụ để cho thấy lý do tại sao chuỗi f dễ quản lý hơn.

 old_school_formatting =('Tennis Legeng là% (player) s,' '% (player) s đã giành được% (title) s danh hiệu' ', và anh ấy đến từ quốc gia% (country) s.') old_formatted =old_school_formatting% {'player':'Roger Federer', 'title':20, 'country':'Swiss',} print ('Output \ n' + old_formatted) 

Đầu ra

 Tennis Legeng là Roger Federer, Roger Federer đã giành được 20 danh hiệu và anh ấy đến từ đất nước Thụy Sĩ. 


 new_formatting =('Tennis Legeng là {player},' '{player} đã giành được {title} danh hiệu' 'và anh ấy đến từ quốc gia {country}') new_formatted =new_formatting.format (player ='Roger Federer ', title =20, country =' Swiss ',) print (' Output \ n '+ new_formatted) 

Đầu ra

 Tennis Legeng là Roger Federer, Roger Federer đã giành được 20 danh hiệu và anh ấy đến từ đất nước Thụy Sĩ 

Kiểu này ít ồn ào hơn một chút vì nó loại bỏ một số trích dẫn trong từ điển và khá nhiều ký tự trong mã định dạng, nhưng nó hầu như không hấp dẫn.