Streamlit의 다양한 기능들-
Streamlit: Python으로 간편하게 웹 애플리케이션 만들기
데이터 분석이나 머신러닝 모델을 웹 애플리케이션으로 배포하고 싶지만, 복잡한 웹 개발 과정이 부담스럽다면?Streamlit이 정답일 수 있습니다. Python 코드만으로 대화형 웹 애플리케이션을 손쉽
maeilcoding.tistory.com
이번 예제에서는 이미지, CSV, PDF 파일을 업로드하고, 해당 파일을 화면에 출력하는 기능을 구현해 보겠습니다.
프로젝트 개요
Streamlit을 이용해 다음 기능을 구현합니다.
- 사이드바를 활용한 파일 업로드 기능 제공
- 업로드된 파일을 저장 후 사용자에게 알림 제공
- 이미지 파일의 경우 화면에 표시
- CSV 파일의 경우 데이터프레임 형태로 출력
- PDF 파일의 경우 업로드 및 정보 제공
구현 코드
아래는 Streamlit을 활용하여 파일을 업로드하고 저장하는 전체 코드입니다.
import pandas as pd
import streamlit as st
from datetime import datetime
import os
# 선택한 파일을 저장하는 함수
def save_uploadedfile(directory, file):
# 1. 디렉토리가 없으면 생성
if not os.path.exists(directory):
os.makedirs(directory)
# 2. 파일 저장 (이름 변경 없이 저장)
with open(os.path.join(directory, file.name), 'wb') as f:
f.write(file.getbuffer())
# 3. 저장 완료 메시지 출력
st.success(f'저장 완료: {directory}에 {file.name} 저장되었습니다.')
# 메인 함수
def main():
st.title('파일 업로드 예제')
st.sidebar.title('사이드바')
menu = ['이미지 파일 업로드', 'CSV 파일 업로드', 'PDF 파일 업로드']
choice = st.sidebar.selectbox('메뉴를 선택하세요.', menu)
if choice == menu[0]: # 이미지 파일 업로드
st.subheader(menu[0])
file = st.file_uploader('이미지 파일 업로드', type=['png', 'jpg', 'jpeg', 'webp'])
if file is not None:
new_filename = datetime.now().isoformat().replace(':', '_') + '.jpg'
file.name = new_filename # 파일명 변경
save_uploadedfile('images', file)
st.image(file, use_container_width=True)
elif choice == menu[1]: # CSV 파일 업로드
st.subheader(menu[1])
file = st.file_uploader('CSV 파일 업로드', type=['csv'])
if file is not None:
save_uploadedfile('csv', file)
df = pd.read_csv(file)
st.dataframe(df)
elif choice == menu[2]: # PDF 파일 업로드
st.subheader(menu[2])
file = st.file_uploader('PDF 파일 업로드', type=['pdf'])
if file is not None:
save_uploadedfile('pdf', file)
st.write(file)
if __name__ == '__main__':
main()
코드 설명
**1️⃣ 파일 저장 함수 (save_uploadedfile)
- 파일이 업로드될 디렉토리가 존재하지 않으면 자동으로 생성
- 업로드된 파일을 해당 디렉토리에 저장
- 저장 완료 후 사용자에게 성공 메시지 출력
2️⃣ 파일 업로드 및 처리
- 이미지 파일 (.png, .jpg, .jpeg, .webp): 업로드 후 저장, 화면에 표시
- CSV 파일 (.csv): 업로드 후 저장, 데이터프레임 형태로 출력
- PDF 파일 (.pdf): 업로드 후 저장, 업로드된 파일 표시
3️⃣ UI 구성
- **사이드바 (st.sidebar.selectbox)**를 이용하여 사용자가 업로드할 파일 유형을 선택할 수 있도록 함
- **파일 업로드 위젯 (st.file_uploader)**을 통해 사용자에게 파일 업로드 기능 제공
실행 방법
위 코드를 app.py로 저장한 후 터미널에서 다음 명령어를 실행하면 Streamlit 앱이 실행됩니다.
streamlit run app.py
이제 웹 브라우저에서 파일을 업로드하고 처리하는 기능을 직접 확인할 수 있습니다.
마무리
이번 포스팅에서는 Streamlit을 활용하여 파일 업로드 기능을 구현하는 방법을 알아보았습니다. Streamlit의 강력한 기능을 활용하면 웹 애플리케이션을 쉽고 빠르게 개발할 수 있습니다.