728x90
반응형
Streamlit은 데이터 시각화와 웹 애플리케이션을 간단히 구축할 수 있는 Python 기반의 오픈소스 라이브러리입니다. 이 글에서는 Streamlit을 사용하여 **Sidebar(사이드바)**를 생성하고, 다양한 파일 업로드 기능을 구현하는 방법을 소개합니다.
1. Sidebar란?
Sidebar는 Streamlit에서 제공하는 사이드 영역으로, 사용자 입력을 받아 데이터를 처리하거나 인터랙션을 구현할 때 활용됩니다. 이를 통해 화면 공간을 효율적으로 사용할 수 있습니다.
2. 구현할 Sidebar 기능
메뉴 옵션
- 이미지 파일 업로드
- CSV 파일 업로드
- PDF 파일 업로드
각 메뉴에 따라 다른 파일 업로드 기능이 동작하며, 업로드한 파일을 저장하고 화면에 표시하는 기능을 제공합니다.
3. 코드 상세 설명
아래는 전체 구현 코드입니다.
import pandas as pd
import streamlit as st
from datetime import datetime
# 유저가 업로드한 파일을 저장하는 함수
def save_uploaded_file(directory, file):
import os
if not os.path.exists(directory):
os.makedirs(directory)
with open(os.path.join(directory, file.name), 'wb') as f:
f.write(file.getbuffer())
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('이미지 파일 업로드')
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_uploaded_file('images', file)
st.image(file, use_container_width=True)
elif choice == menu[1]:
st.subheader('csv 파일 업로드')
file = st.file_uploader('csv 파일 업로드', type=['csv'])
if file is not None:
save_uploaded_file('csv', file)
df = pd.read_csv(file)
st.dataframe(df)
else:
st.subheader('pdf 파일 업로드')
file = st.file_uploader('pdf 파일 업로드', type=['pdf'])
if file is not None:
save_uploaded_file('pdf', file)
st.write(file)
if __name__ == '__main__':
main()
4. 코드 실행 결과
1. 사이드바 생성
- 왼쪽 사이드바에서 메뉴를 선택할 수 있습니다.
- 옵션: 이미지 파일 업로드, csv 파일 업로드, pdf 파일 업로드.
2. 이미지 파일 업로드
- Drag and drop 또는 Browse files 버튼을 통해 이미지를 업로드할 수 있습니다.
- 업로드한 이미지는 저장된 후 화면에 표시됩니다.
3. CSV 파일 업로드
- CSV 파일을 업로드하면 데이터프레임으로 화면에 표시됩니다.
- 업로드한 파일은 csv 폴더에 저장됩니다.
4. PDF 파일 업로드
- PDF 파일을 업로드한 후 저장 경로와 파일 정보가 화면에 표시됩니다.
- 파일은 pdf 폴더에 저장됩니다.
5. 주요 기능 설명
1. Sidebar 생성
- st.sidebar.selectbox()를 사용하여 사용자로부터 메뉴 선택을 받습니다.
- 선택된 메뉴에 따라 동작이 달라지도록 구현하였습니다.
2. 파일 업로드
- st.file_uploader()를 통해 다양한 파일 타입을 지원합니다.
- type 매개변수를 사용해 업로드 가능한 파일 확장자를 지정하였습니다.
3. 파일 저장
- save_uploaded_file() 함수는 파일을 지정한 디렉토리에 저장하는 역할을 합니다.
- 파일 이름을 현재 시간 기반으로 변경하여 중복을 방지하였습니다.
4. 데이터 표시
- CSV 파일은 pandas를 활용하여 데이터프레임으로 변환한 후 화면에 표시됩니다.
- 이미지 파일은 Streamlit의 st.image()를 통해 출력합니다.
728x90
반응형
'Streamlit > 이론' 카테고리의 다른 글
147. [Python] [Streamlit] : Streamlit에서 한글 폰트 설정하기 (Mac, Windows, Linux) (0) | 2025.02.04 |
---|---|
145. [Python] [Streamlit] : Streamlit(스트림릿) 차트 그리기(2) (0) | 2025.02.04 |
144. [Python] [Streamlit] : Streamlit(스트림릿) 차트 그리기(1) (0) | 2025.02.04 |
142. [Python] [Streamlit] : Streamlit(스트림릿) 다양한 UI 함수 (2) (0) | 2025.02.03 |
141. [Python] [Streamlit] : Streamlit(스트림릿) 다양한 UI 함수 (1) (0) | 2025.02.03 |