데이터와 행 이름을 리스트로 넣으면 표를 출력해 주는 함수입니다.
한글을 포맷팅하면 전각 한글을 한 글자로 계산해 표가 제대로 출력되지 않는데, 해당 문제를 해결해 두었습니다.
다른 전각 문자를 사용하려면 reKo
부분에 해당 문자 구간을 추가하면 됩니다.
제어 문자열 "SEP"
를 데이터 리스트에 포함시키면 행 구분을 출력합니다.
Source Code
import re
def drawTable(identifiers,datas):
reKo=re.compile("[가-힣]")
maxLength=[len(str(x))+len(reKo.findall(str(x))) for x in identifiers]
for data in datas:
for index,d in enumerate(data):
if d=="SEP": continue
if maxLength[index]<len(str(d))+len(reKo.findall(str(d))):
maxLength[index]=len(str(d))+len(reKo.findall(str(d)))
divider="-"*(sum(maxLength)+(len(maxLength)+1)+len(maxLength)*2)
print(divider)
formatString="|"+"".join([" {0}{1}:^{2}{3} |".format("{",index,length-len(reKo.findall(str(identifiers[index]))),"}") for index,length in enumerate(maxLength)])
print(formatString.format(*identifiers))
print(divider)
for data in datas:
if data=="SEP":
print(divider)
continue
formatString="|"+"".join(" {0}{1}:^{2}{3} |".format("{",index,length-len(reKo.findall(str(data[index]))),"}") for index,length in enumerate(maxLength))
print(formatString.format(*data))
print(divider)
실행 예시
drawTable(["a","b","합계"],[[1,2,3],[4,5,9],"SEP",[5000,5000,10000]])
Output
주의: 고정폭 폰트를 사용해야 표가 제대로 표시됩니다.
-----------------------
| a | b | 합계 |
-----------------------
| 1 | 2 | 3 |
| 4 | 5 | 9 |
-----------------------
| 5000 | 5000 | 10000 |
-----------------------