2009-09-09 36 views
33

Tôi có một số dữ liệu mà tôi đang hiển thị ở định dạng 3 cột, có dạng:Làm cách nào để căn chỉnh dữ liệu số?

key: value key: <tab> key: value <tab> key: value.

Dưới đây là một ví dụ:

p: 1 sl: 10 afy: 4 
q: 12 lg: 10 kla: 3 
r: 0 kl: 10 klw: 3 
s: 67 vw: 9 jes: 3 
t: 16 uw: 9 skw: 3 
u: 47 ug: 9 mjl: 3 
v: 37 mj: 8 lza: 3 
w: 119 fv: 8 fxg: 3 
x: 16 fl: 8 aew: 3 

Tuy nhiên, tôi muốn nếu những con số được liên kết tất cả các bên, chẳng hạn như:

a: 1 
b: 12 
c: 123 

Làm thế nào tôi có thể làm điều này bằng Python?

Đây là mã in hiện tại tôi có:

print(str(chr(i+ord('a'))) + ": " + str(singleArray[i]) + "\t" + 
    str(doubleArray[i][0]) + ": " + str(doubleArray[i][1]) + "\t" + 
    str(tripleArray[i][0]) + ": " + str(tripleArray[i][1])) 

Trả lời

33

Trong Python 2.5 rjust sử dụng (trên dây). Ngoài ra, hãy thử làm quen với string formatting trong python thay vì chỉ ghép các chuỗi. ví dụ đơn giản cho rjust và chuỗi định dạng dưới đây:

width = 10 
str_number = str(ord('a')) 
print 'a%s' % (str_number.rjust(width)) 
2

Nếu bạn biết aa trên ràng buộc cho con số của bạn, bạn có thể định dạng với "%<lenght>d" % n. Với tất cả những tính toán được thực hiện và trong một danh sách (char, num):

mapping = ((chr(i+ord('a')), singleArray[i]), 
      (doubleArray[i][0],doubleArray[i][1]), 
      (tripleArray[i][0],tripleArray[i][1]) 
      ) 
for row in mapping: 
    print "%s: %3d" % row 
25

Sử dụng chuỗi python định dạng: '%widths' nơi chiều rộng là một số nguyên

>>> '%10s' % 10 
'  10' 
>>> '%10s' % 100000 
' 100000' 
+17

Để sử dụng căn trái '% -10s' (chỉ cần thêm vì đây là kết quả Google hàng đầu cho căn trái) – Mark

72

Trong python 2.6+ (và đó là phương pháp tiêu chuẩn trong 3), phương pháp "ưa thích" để định dạng chuỗi là sử dụng string.format() (tài liệu hoàn chỉnh có thể tìm thấy here). biện minh thích hợp có thể được thực hiện với

"a string {0:>5}".format(foo) 

này sẽ sử dụng 5 chỗ, tuy nhiên

"a string {0:>{1}}".format(foo, width) 

cũng là hợp lệ và sẽ sử dụng độ rộng giá trị như truyền cho .format().

+1

Tôi không biết tại sao câu trả lời này được bỏ phiếu vì nó không chính xác - để biện minh/căn chỉnh, nó là cần thiết để sử dụng '" {:> 5} "' where '>' cho biết phải căn chỉnh (mặc định cho chuỗi là '<', hoặc căn trái). May mắn thay, tài liệu liên kết làm cho điều này rõ ràng. (EDIT: không bao giờ tâm trí, tôi sẽ chỉ sửa chữa câu trả lời và để lại điều này để tham khảo.) – Pat

+6

Nó đã được upvoted vì ">" là giá trị mặc định của trường 'align' cho số, và câu hỏi về số. Bạn nói đúng, làm cho nó rõ ràng là tốt hơn. –

+1

Mea culpa.Tôi đã tìm thấy câu hỏi này bởi vì tôi đã cố gắng sắp xếp đúng chuỗi, và tôi đã không đọc câu hỏi OP đủ gần để bắt được rằng chỉ có các số được in. Cảm ơn bạn đã làm rõ. – Pat

3

Trong Python 3.6, bạn có thể sử dụng Literal String Interpolation, đó là ít tiết và có lẽ trực quan hơn để sử dụng:

width = 5 
number = 123 
print (f'{number:>{width}}') 

Hoặc chỉ:

number = 123 
print (f'{number:>5}') 

Nó tái sử dụng nhiều cú pháp str.format().

Tôi đoán/hy vọng đây sẽ là cách được ưu tiên trong tương lai.

+0

GitHub: [Sử dụng nội suy chuỗi kiểu chữ f mà không có Python 3.6] (https://github.com/damnever/fmt) –

Các vấn đề liên quan