복붙노트

[PYTHON] 파이썬 형식 표 출력 [duplicate]

PYTHON

파이썬 형식 표 출력 [duplicate]

python2.7을 사용하여 테이블 형식의 데이터를 인쇄하려고합니다.

이 코드는 대략 다음과 같습니다.

for i in mylist:
   print "{}\t|{}\t|".format (i, f(i))

문제는 i 또는 f (i)의 길이에 따라 데이터가 정렬되지 않는다는 것입니다.

이것이 내가 얻는 것입니다.

|foo |bar |
|foobo   |foobar  |

내가 얻고 싶은 것 :

|foo     |bar     |
|foobo   |foobar  |

이 작업을 수행 할 수있는 모듈이 있습니까?

해결법

  1. ==============================

    1.자신 만의 서식 지정 기능을 사용하는 것은 그리 어렵지 않습니다.

    자신 만의 서식 지정 기능을 사용하는 것은 그리 어렵지 않습니다.

    def print_table(table):
        col_width = [max(len(x) for x in col) for col in zip(*table)]
        for line in table:
            print "| " + " | ".join("{:{}}".format(x, col_width[i])
                                    for i, x in enumerate(line)) + " |"
    
    table = [(str(x), str(f(x))) for x in mylist]
    print_table(table)
    
  2. ==============================

    2.pypi, PrettyTable에 대한 좋은 모듈이 있습니다.

    pypi, PrettyTable에 대한 좋은 모듈이 있습니다.

    http://code.google.com/p/prettytable/wiki/Tutorial

    http://pypi.python.org/pypi/PrettyTable/

    $ pip install PrettyTable
    
  3. ==============================

    3.더 아름다운 테이블을 사용하려면 tabulate 모듈을 사용하십시오.

    더 아름다운 테이블을 사용하려면 tabulate 모듈을 사용하십시오.

    사이트 링크

    여기에 한 가지 예가보고되었습니다.

    >>> from tabulate import tabulate
    
    >>> table = [["Sun",696000,1989100000],["Earth",6371,5973.6],
    ...          ["Moon",1737,73.5],["Mars",3390,641.85]]
    >>> print tabulate(table)
    -----  ------  -------------
    Sun    696000     1.9891e+09
    Earth    6371  5973.6
    Moon     1737    73.5
    Mars     3390   641.85
    -----  ------  -------------
    
  4. ==============================

    4.

    mylist = {"foo":"bar", "foobo":"foobar"}
    
    width_col1 = max([len(x) for x in mylist.keys()])
    width_col2 = max([len(x) for x in mylist.values()])
    
    def f(ind):
        return mylist[ind]
    
    for i in mylist:
        print "|{0:<{col1}}|{1:<{col2}}|".format(i,f(i),col1=width_col1,
                                                col2=width_col2)
    
  5. ==============================

    5.열의 왼쪽 정렬을 원했던 것처럼 보이지만 ljust 문자열 메서드에 대한 답변은 보지 못했습니다. 그래서 Python 2.7에서 그 방법을 보여 드리겠습니다.

    열의 왼쪽 정렬을 원했던 것처럼 보이지만 ljust 문자열 메서드에 대한 답변은 보지 못했습니다. 그래서 Python 2.7에서 그 방법을 보여 드리겠습니다.

    def bar(item):
        return item.replace('foo','bar')
    
    width = 20
    mylist = ['foo1','foo200000','foo33','foo444']
    
    for item in mylist:
        print "{}| {}".format(item.ljust(width),bar(item).ljust(width))
    
    foo1                | bar1
    foo200000           | bar200000
    foo33               | bar33
    foo444              | bar444
    

    참조 용으로 help ( 'abc'.ljust)를 실행하면 다음과 같이 표시됩니다.

    ljust 메서드가 지정한 너비를 가져 와서 문자열의 길이를 빼고 그 문자열의 오른쪽면을 그 많은 문자로 채 웁니다.

  6. ==============================

    6.BeautifulTable을 사용해보십시오. 다음은 그 예입니다.

    BeautifulTable을 사용해보십시오. 다음은 그 예입니다.

    >>> from beautifultable import BeautifulTable
    >>> table = BeautifulTable()
    >>> table.column_headers = ["name", "rank", "gender"]
    >>> table.append_row(["Jacob", 1, "boy"])
    >>> table.append_row(["Isabella", 1, "girl"])
    >>> table.append_row(["Ethan", 2, "boy"])
    >>> table.append_row(["Sophia", 2, "girl"])
    >>> table.append_row(["Michael", 3, "boy"])
    >>> print(table)
    +----------+------+--------+
    |   name   | rank | gender |
    +----------+------+--------+
    |  Jacob   |  1   |  boy   |
    +----------+------+--------+
    | Isabella |  1   |  girl  |
    +----------+------+--------+
    |  Ethan   |  2   |  boy   |
    +----------+------+--------+
    |  Sophia  |  2   |  girl  |
    +----------+------+--------+
    | Michael  |  3   |  boy   |
    +----------+------+--------+
    
  7. from https://stackoverflow.com/questions/8356501/python-format-tabular-output by cc-by-sa and MIT license