Hướng dẫn python formatting output into columns - đầu ra định dạng python thành cột

Để có được những chiếc bàn fancier như

---------------------------------------------------
| First Name | Last Name        | Age | Position  |
---------------------------------------------------
| John       | Smith            | 24  | Software  |
|            |                  |     | Engineer  |
---------------------------------------------------
| Mary       | Brohowski        | 23  | Sales     |
|            |                  |     | Manager   |
---------------------------------------------------
| Aristidis  | Papageorgopoulos | 28  | Senior    |
|            |                  |     | Reseacher |
---------------------------------------------------

Bạn có thể sử dụng công thức Python này:

'''
From //code.activestate.com/recipes/267662-table-indentation/
PSF License
'''
import cStringIO,operator

def indent[rows, hasHeader=False, headerChar='-', delim=' | ', justify='left',
           separateRows=False, prefix='', postfix='', wrapfunc=lambda x:x]:
    """Indents a table by column.
       - rows: A sequence of sequences of items, one sequence per row.
       - hasHeader: True if the first row consists of the columns' names.
       - headerChar: Character to be used for the row separator line
         [if hasHeader==True or separateRows==True].
       - delim: The column delimiter.
       - justify: Determines how are data justified in their column. 
         Valid values are 'left','right' and 'center'.
       - separateRows: True if rows are to be separated by a line
         of 'headerChar's.
       - prefix: A string prepended to each printed row.
       - postfix: A string appended to each printed row.
       - wrapfunc: A function f[text] for wrapping text; each element in
         the table is first wrapped by this function."""
    # closure for breaking logical rows to physical, using wrapfunc
    def rowWrapper[row]:
        newRows = [wrapfunc[item].split['\n'] for item in row]
        return [[substr or '' for substr in item] for item in map[None,*newRows]]
    # break each logical row into one or more physical ones
    logicalRows = [rowWrapper[row] for row in rows]
    # columns of physical rows
    columns = map[None,*reduce[operator.add,logicalRows]]
    # get the maximum of each column by the string length of its items
    maxWidths = [max[[len[str[item]] for item in column]] for column in columns]
    rowSeparator = headerChar * [len[prefix] + len[postfix] + sum[maxWidths] + \
                                 len[delim]*[len[maxWidths]-1]]
    # select the appropriate justify method
    justify = {'center':str.center, 'right':str.rjust, 'left':str.ljust}[justify.lower[]]
    output=cStringIO.StringIO[]
    if separateRows: print >> output, rowSeparator
    for physicalRows in logicalRows:
        for row in physicalRows:
            print >> output, \
                prefix \
                + delim.join[[justify[str[item],width] for [item,width] in zip[row,maxWidths]]] \
                + postfix
        if separateRows or hasHeader: print >> output, rowSeparator; hasHeader=False
    return output.getvalue[]

# written by Mike Brown
# //aspn.activestate.com/ASPN/Cookbook/Python/Recipe/148061
def wrap_onspace[text, width]:
    """
    A word-wrap function that preserves existing line breaks
    and most spaces in the text. Expects that existing line
    breaks are posix newlines [\n].
    """
    return reduce[lambda line, word, width=width: '%s%s%s' %
                  [line,
                   ' \n'[[len[line[line.rfind['\n']+1:]]
                         + len[word.split['\n',1][0]
                              ] >= width]],
                   word],
                  text.split[' ']
                 ]

import re
def wrap_onspace_strict[text, width]:
    """Similar to wrap_onspace, but enforces the width constraint:
       words longer than width are split."""
    wordRegex = re.compile[r'\S{'+str[width]+r',}']
    return wrap_onspace[wordRegex.sub[lambda m: wrap_always[m.group[],width],text],width]

import math
def wrap_always[text, width]:
    """A simple word-wrap function that wraps text on exactly width characters.
       It doesn't split the text in words."""
    return '\n'.join[[ text[width*i:width*[i+1]] \
                       for i in xrange[int[math.ceil[1.*len[text]/width]]] ]]

if __name__ == '__main__':
    labels = ['First Name', 'Last Name', 'Age', 'Position']
    data = \
    '''John,Smith,24,Software Engineer
       Mary,Brohowski,23,Sales Manager
       Aristidis,Papageorgopoulos,28,Senior Reseacher'''
    rows = [row.strip[].split[',']  for row in data.splitlines[]]

    print 'Without wrapping function\n'
    print indent[[labels]+rows, hasHeader=True]
    # test indent with different wrapping functions
    width = 10
    for wrapper in [wrap_always,wrap_onspace,wrap_onspace_strict]:
        print 'Wrapping function: %s[x,width=%d]\n' % [wrapper.__name__,width]
        print indent[[labels]+rows, hasHeader=True, separateRows=True,
                     prefix='| ', postfix=' |',
                     wrapfunc=lambda x: wrapper[x,width]]

    # output:
    #
    #Without wrapping function
    #
    #First Name | Last Name        | Age | Position         
    #-------------------------------------------------------
    #John       | Smith            | 24  | Software Engineer
    #Mary       | Brohowski        | 23  | Sales Manager    
    #Aristidis  | Papageorgopoulos | 28  | Senior Reseacher 
    #
    #Wrapping function: wrap_always[x,width=10]
    #
    #----------------------------------------------
    #| First Name | Last Name  | Age | Position   |
    #----------------------------------------------
    #| John       | Smith      | 24  | Software E |
    #|            |            |     | ngineer    |
    #----------------------------------------------
    #| Mary       | Brohowski  | 23  | Sales Mana |
    #|            |            |     | ger        |
    #----------------------------------------------
    #| Aristidis  | Papageorgo | 28  | Senior Res |
    #|            | poulos     |     | eacher     |
    #----------------------------------------------
    #
    #Wrapping function: wrap_onspace[x,width=10]
    #
    #---------------------------------------------------
    #| First Name | Last Name        | Age | Position  |
    #---------------------------------------------------
    #| John       | Smith            | 24  | Software  |
    #|            |                  |     | Engineer  |
    #---------------------------------------------------
    #| Mary       | Brohowski        | 23  | Sales     |
    #|            |                  |     | Manager   |
    #---------------------------------------------------
    #| Aristidis  | Papageorgopoulos | 28  | Senior    |
    #|            |                  |     | Reseacher |
    #---------------------------------------------------
    #
    #Wrapping function: wrap_onspace_strict[x,width=10]
    #
    #---------------------------------------------
    #| First Name | Last Name  | Age | Position  |
    #---------------------------------------------
    #| John       | Smith      | 24  | Software  |
    #|            |            |     | Engineer  |
    #---------------------------------------------
    #| Mary       | Brohowski  | 23  | Sales     |
    #|            |            |     | Manager   |
    #---------------------------------------------
    #| Aristidis  | Papageorgo | 28  | Senior    |
    #|            | poulos     |     | Reseacher |
    #---------------------------------------------

Trang công thức Python chứa một vài cải tiến về nó.

Làm cách nào để in các cột văn bản trong Python?

3 cách dễ dàng để in tên cột trong Python..
Sử dụng gấu trúc.khung dữ liệu.Cột để in tên cột trong Python.....
Sử dụng gấu trúc.khung dữ liệu.cột.....
Phương thức python sort [] để lấy tên cột.Phương thức Python Sắp xếp [] có thể được sử dụng để lấy danh sách tên cột của DataFrame theo thứ tự tăng dần của các cột ..

%D %s trong python là gì?

%s hoạt động một trình giữ chỗ cho một chuỗi trong khi %D hoạt động như một trình giữ chỗ cho một số.Các giá trị liên quan của chúng được truyền qua thông qua một tuple bằng toán tử %.. Their associated values are passed in via a tuple using the % operator.

Làm thế nào để bạn căn chỉnh đầu ra trong Python?

Căn chỉnh đầu ra gọn gàng bằng cách sử dụng F-Prefix, bạn có thể sử dụng tùy chọn:>,: , :< or :^ option in the f-format to left align, right align or center align the text that you want to format. We can use the fortmat[] string function in python to output the desired text in the order we want.

Bài Viết Liên Quan

Chủ Đề