728x90
반응형
문제
도커 컨테이너에서 제공하는 CSV 파일을 읽어서 아래와 같은 형식의 출력을 만드는 파이썬 프로그램을 제작하시오.
도커 컨테이너 실행
PS C:\> docker container run -p 8080:80 -d myanjini/testweb:latest
CSV 파일 경로
http://localhost:8080/covid19.csv
출력 형식
평가기준
1) 프로그램 실행 여부
2) 프로그램 완성도
- 지역별 합계 정보 제시 및 정확성
- 확진자 합계의 최대값, 최소값 계산 및 해당 지역 제시
- 숫자 데이터 천단위 콤마 표시
- 통계치가 없는 경우 CSV 파일에 있는 “-” 기호를 그대로 출력 (예: 세종, 제주 1월)
예시답안코드
import csv, re
import urllib.request
import unicodedata
from io import StringIO
def fill_str_with_space(input_str='', max_size=10, fill_char=' '):
l = 0
for c in input_str:
if unicodedata.east_asian_width(c) in ['F', 'W']:
l += 2
else:
l += 1
return fill_char*(max_size-l) + input_str
def get_format_str(s: str) -> str:
try:
s = '{:>,}'.format(int(s))
except:
s = '{:>}'.format(s)
return fill_str_with_space(s)
def print_label(datas: list) -> None:
for item in datas[1:]:
print('{}'.format(get_format_str(item)), end='')
print()
def print_data(datas: list) -> None:
for item in datas[1:]:
print('{}'.format(get_format_str(item)), end='')
print()
def get_sum(datas: list) -> int:
sum = 0
for item in datas:
if item.isnumeric():
sum = sum + int(item)
return sum
def print_summary(area: list, total: list) -> None:
value = max(total)
label = area[total.index(value)]
print("{0}에서 {1:,}명으로 확진자가 가장 많이 발생했으며,".format(label, value))
value = min(total)
label = area[total.index(value)]
print("{0}에서 {1:,}명으로 확진자가 가장 적게 발생했습니다.".format(label, value))
def line_to_list(line: str) -> list:
lists = []
datas = line.decode('utf-8').split(',')
for data in datas:
data = data.replace(',','')
data = data.strip()
lists.append(data)
return lists
def print_covid19_data() -> None:
area = []
total = []
with urllib.request.urlopen("http://localhost:8080/covid19.csv") as webpage:
for line in webpage:
line = line_to_list(line)
if line[0] == '구분':
line.append('합계')
print_label(line)
else:
sum = get_sum(line)
line.append(sum)
print_data(line)
area.append(line[1])
total.append(sum)
print_summary(area, total)
if __name__ == "__main__":
print_covid19_data()
728x90
반응형
'수업자료' 카테고리의 다른 글
보안융합 실기평가 풀이 2021.10.13 (0) | 2021.10.06 |
---|---|
보안융합 필답평가 풀이 2021.10.13 (0) | 2021.10.06 |
보안융합 필답평가 풀이 2021.04.07 (0) | 2021.03.31 |
클라우드 필답평가 풀이 2021.03.18 (0) | 2021.03.16 |
실습평가 (0) | 2021.03.07 |
댓글