파이썬으로 서식이 지정된 표 만들기
이제 다양한 정렬 기법을 배웠으니, 이를 활용하여 잘 정렬된 표를 만드는 방법을 알아보겠습니다. 표는 구조화된 데이터를 읽기 쉬운 형식으로 표시하는 일반적인 방법이며, 적절한 정렬은 표 형식의 정보를 효과적으로 제시하는 데 매우 중요합니다.
고정 너비 열을 가진 간단한 표
고정 너비 열을 사용하여 간단한 표를 만드는 방법을 살펴보겠습니다.
/home/labex/project 디렉토리에 simple_table.py라는 새 파일을 만듭니다.
## simple_table.py
print("고정 너비 표")
print("-" * 50)
## 데이터 정의
header = ["이름", "나이", "도시", "직업"]
data = [
["John Smith", 34, "New York", "의사"],
["Sarah Johnson", 28, "San Francisco", "엔지니어"],
["Michael Brown", 42, "Chicago", "교사"],
["Emily Davis", 31, "Boston", "과학자"]
]
## 헤더 출력
print(f"{header[0]:<20} {header[1]:<8} {header[2]:<15} {header[3]:<15}")
print("-" * 60)
## 행 출력
for row in data:
print(f"{row[0]:<20} {row[1]:<8} {row[2]:<15} {row[3]:<15}")
- 파일을 저장하고 실행합니다.
python3 ~/project/simple_table.py
- 다음과 같이 깔끔하게 정렬된 표가 출력됩니다.
고정 너비 표
--------------------------------------------------
이름 나이 도시 직업
------------------------------------------------------------
John Smith 34 New York 의사
Sarah Johnson 28 San Francisco 엔지니어
Michael Brown 42 Chicago 교사
Emily Davis 31 Boston 과학자
여러 정렬 유형을 가진 동적 표
다양한 유형의 데이터는 종종 서로 다른 정렬 스타일로 더 잘 표시됩니다. 예를 들어, 텍스트는 종종 왼쪽 정렬되고, 숫자는 종종 오른쪽 정렬됩니다. 혼합된 정렬을 사용하여 더 정교한 표를 만들어 보겠습니다.
/home/labex/project 디렉토리에 dynamic_table.py라는 새 파일을 만듭니다.
## dynamic_table.py
print("혼합 정렬을 사용한 동적 표")
print("-" * 50)
## 데이터 정의
header = ["제품", "가격", "수량", "총액"]
products = [
["노트북", 1299.99, 3, 3899.97],
["마우스", 24.50, 10, 245.00],
["모니터", 349.95, 2, 699.90],
["키보드", 49.99, 5, 249.95],
["헤드폰", 89.95, 4, 359.80]
]
## 내용에 기반한 열 너비 계산
col_widths = [
max(len(str(header[0])), max(len(str(row[0])) for row in products)) + 2,
max(len(str(header[1])), max(len(f"${row[1]:.2f}") for row in products)) + 2,
max(len(str(header[2])), max(len(str(row[2])) for row in products)) + 2,
max(len(str(header[3])), max(len(f"${row[3]:.2f}") for row in products)) + 2
]
## 헤더 출력
print(f"{header[0]:<{col_widths[0]}}"
f"{header[1]:>{col_widths[1]}}"
f"{header[2]:>{col_widths[2]}}"
f"{header[3]:>{col_widths[3]}}")
print("-" * sum(col_widths))
## 적절한 정렬로 행 출력
for product in products:
print(f"{product[0]:<{col_widths[0]}}",
f"${product[1]:.2f}".rjust(col_widths[1]),
f"{product[2]}".rjust(col_widths[2]),
f"${product[3]:.2f}".rjust(col_widths[3]))
## 요약 출력
total_quantity = sum(product[2] for product in products)
total_cost = sum(product[3] for product in products)
print("-" * sum(col_widths))
print(f"{'총계':<{col_widths[0]}}",
f"".rjust(col_widths[1]),
f"{total_quantity}".rjust(col_widths[2]),
f"${total_cost:.2f}".rjust(col_widths[3]))
... (나머지 코드 생략)