Hướng dẫn python tab formatted printing - in định dạng thẻ python

Phục sinh một chủ đề khác, nhưng điều này có thể có ích cho một số người.

Với một chút cảm hứng từ https://pyformat.info, bạn có thể xây dựng một phương thức để có được một bảng nội dung [TOC] in phong cách.

# Define parameters
Location = '10-10-10-10'
Revision = 1
District = 'Tower'
MyDate = 'May 16, 2012'
MyUser = 'LOD'
MyTime = '10:15'

# This is just one way to arrange the data
data = [
    ['Location: '+Location, 'Revision:'+str(Revision)],
    ['District: '+District, 'Date: '+MyDate],
    ['User: '+MyUser,'Time: '+MyTime]
]

# The 'Table of Content' [TOC] style print function
def print_table_line(key,val,space_char,val_loc):
    # key:        This would be the TOC item equivalent
    # val:        This would be the TOC page number equivalent
    # space_char: This is the spacing character between key and val (often a dot for a TOC), must be >= 5
    # val_loc:    This is the location in the string where the first character of val would be located

    val_loc = max(5,val_loc)

    if (val_loc <= len(key)):
        # if val_loc is within the space of key, truncate key and
        cut_str =  '{:.'+str(val_loc-4)+'}'
        key = cut_str.format(key)+'...'+space_char

    space_str = '{:'+space_char+'>'+str(val_loc-len(key)+len(str(val)))+'}'
    print(key+space_str.format(str(val)))

# Examples
for d in data:
    print_table_line(d[0],d[1],' ',30)

print('\n')
for d in data:
    print_table_line(d[0],d[1],'_',25)

print('\n')
for d in data:
    print_table_line(d[0],d[1],' ',20)

Đầu ra kết quả như sau:

Location: 10-10-10-10         Revision:1
District: Tower               Date: May 16, 2012
User: LOD                     Time: 10:15


Location: 10-10-10-10____Revision:1
District: Tower__________Date: May 16, 2012
User: LOD________________Time: 10:15


Location: 10-10-... Revision:1
District: Tower     Date: May 16, 2012
User: LOD           Time: 10:15

Python cung cấp một số cách định dạng và thực hiện các thủ thuật như thêm màu sắc vào đầu ra và căn chỉnh văn bản trong các cột - trái hoặc phải.Dưới đây bạn có thể thấy ví dụ đơn giản trước và sau khi hình thành và sự khác biệt lớn trong đầu ra:

Có nhiều cách để thêm màu trong Python:

  • Colorama - cách ưa thích của tôi để thêm màu sắc.Nó có thể được cài đặt bởi:
pip install colorama
  • Sử dụng định dạng in như:
print('\x1b[1;15;37m' + 'I'm in color' + '\x1b[0m')

Định dạng là như sau:

color_start = '\033[45m'
color_end = '\033[0m'
print(color_start + "I'm in color" + color_end)

Nếu bạn bỏ qua phần cuối màu, tất cả các bản in còn lại của bạn sẽ có cùng màu.

Điều tương tự cho căn chỉnh văn bản Bạn có một số tùy chọn:

  • Sử dụng các chức năng chuỗi như Ljust
print 'Bitcoin'.ljust(15)
  • Sử dụng định dạng:
print('{:<15s}{:>6s}{:>20s}{:>15s}'.format(coins[i][0],coins[i][1],coins[i][2],coins[i][3]))

Trong ví dụ dưới đây tôi đang sử dụng Colorama và định dạng:

from colorama import Style, Fore

coins = [['NAME', '#', 'Price', 'Change (%)'],
        ['Bitcoin', 1, '$7,430.07', 1.22],
        ['Ethereum', 2, '$461.02', -3.43],
        ['XRP', 3, '$0.46150', -3.90],
        ['Bitcoin Cash', 4, '$804.32', -1.70],
        ['EOS', 5, '$8.11', -4.29],
        ['Stellar', 6, '$0.29635', 0.91]]

dash = '-' * 60

def color(val):

    if val > 0:
        out = Fore.RED + str(val) + Style.RESET_ALL
    else:
        out = Fore.GREEN + str(val) + Style.RESET_ALL
    return out


for i in range(len(coins)):
    if i == 0:
      print(dash)
      print('{:<15s}{:>6s}{:>20s}{:>15s}'.format(coins[i][0],coins[i][1],coins[i][2],coins[i][3]))
      print(dash)
    else:
      print('{:<15s}{:>6d}{:>20s}{:>7s}{:>15s}'.format(coins[i][0],coins[i][1],coins[i][2],"",color(coins[i][3])))


print(dash)
print('{}, {}, {}, {}'.format(coins[0][0],coins[0][1],coins[0][2],coins[0][3]))
print(dash)
for i in range(1, len(coins)):
      print('{}, {}, {}, {}'.format(coins[i][0],coins[i][1],coins[i][2],coins[i][3]))

Kết quả (điều này được hiển thị mà không có màu sắc:

------------------------------------------------------------
NAME                #               Price     Change (%)
------------------------------------------------------------
Bitcoin             1           $7,430.07         1.22
Ethereum            2             $461.02        -3.43
XRP                 3            $0.46150         -3.9
Bitcoin Cash        4             $804.32         -1.7
EOS                 5               $8.11        -4.29
Stellar             6            $0.29635         0.91
------------------------------------------------------------
NAME, #, Price, Change (%)
------------------------------------------------------------
Bitcoin, 1, $7,430.07, 1.22
Ethereum, 2, $461.02, -3.43
XRP, 3, $0.46150, -3.9
Bitcoin Cash, 4, $804.32, -1.7
EOS, 5, $8.11, -4.29
Stellar, 6, $0.29635, 0.91

Triển vọng cuối cùng giống như trong bức tranh này: