Streamlit에서 파일 업로드하기
Streamlit에서 파일 업로드하기
Streamlit에서 파일 업로드 기능은 간단하고 직관적으로 파일을 업로드할 수 있게 해주는 컴포넌트입니다. 이 기능을 사용하면 사용자가 로컬 파일을 애플리케이션으로 업로드하여 해당 파일을 처리하거나 시각화할 수 있습니다.
파일 업로드 기능은 주로 데이터를 업로드할 때 사용되며, CSV 파일, 이미지, 텍스트 파일, PDF 등 다양한 파일 형식을 지원합니다.
1. 파일 업로드 기능 설명
Streamlit에서 파일을 업로드하는 기본 함수는 st.file_uploader()
입니다. 이 함수는 파일 업로드 위젯을 생성하며, 사용자가 파일을 업로드하면 해당 파일을 반환합니다. st.file_uploader()
는 다양한 옵션을 제공하여 파일 형식 제한, 여러 파일 업로드, 텍스트 표시 등을 설정할 수 있습니다.
주요 파라미터
- label: 업로드 위젯에 표시될 레이블(필수).
- type: 허용할 파일 형식을 지정하는 문자열 리스트. 예를 들어,
["png", "jpg"]
는 이미지 파일만 업로드할 수 있게 제한합니다. - accept_multiple_files: 여러 파일을 한 번에 업로드할 수 있도록 허용하는 옵션. 기본값은
False
이며,True
로 설정하면 여러 파일을 동시에 업로드할 수 있습니다. - key: 파일 업로더의 고유 키값을 지정합니다.
- help: 파일 업로더 위젯에 설명을 추가할 수 있습니다.
2. 간단한 예제
기본 파일 업로드 예제
import streamlit as st
# 파일 업로더
= st.file_uploader("파일을 업로드하세요.", type=["csv", "txt", "xlsx"])
uploaded_file
# 파일이 업로드되었을 때
if uploaded_file is not None:
# 파일 내용 읽기
= {"FileName": uploaded_file.name, "FileType": uploaded_file.type, "FileSize": uploaded_file.size}
file_details
st.write(file_details)
# CSV 파일 처리 예시
if uploaded_file.type == "text/csv":
import pandas as pd
= pd.read_csv(uploaded_file)
df st.write(df)
코드 설명
st.file_uploader()
: “파일을 업로드하세요.”라는 레이블로 파일 업로더 위젯을 만듭니다. 여기서는 CSV, TXT, XLSX 파일만 허용합니다.- 파일 확인 및 처리: 파일이 업로드되면 파일의 이름, 형식, 크기를 확인한 후
pandas
를 사용해 CSV 파일을 읽어와 화면에 출력합니다.
3. 여러 파일 업로드 예제
여러 개의 파일을 업로드할 수 있도록 설정하려면 accept_multiple_files=True
옵션을 사용합니다.
import streamlit as st
# 여러 파일 업로드
= st.file_uploader("여러 파일을 업로드하세요.", accept_multiple_files=True)
uploaded_files
if uploaded_files is not None:
for uploaded_file in uploaded_files:
f"파일명: {uploaded_file.name}")
st.write(# 파일 내용을 읽어옵니다.
= uploaded_file.read()
content st.write(content)
코드 설명
accept_multiple_files=True
: 여러 파일을 업로드할 수 있도록 설정합니다.- 반복문을 사용한 처리: 업로드된 여러 파일 각각에 대해 파일명을 출력하고, 파일 내용을 화면에 표시합니다.
4. 이미지 파일 업로드 및 표시 예제
이미지 파일을 업로드하고 화면에 표시하는 간단한 예제입니다.
import streamlit as st
from PIL import Image
# 이미지 파일 업로더
= st.file_uploader("이미지 파일을 업로드하세요.", type=["png", "jpg", "jpeg"])
uploaded_image
if uploaded_image is not None:
# 이미지 열기
= Image.open(uploaded_image)
image ="업로드된 이미지", use_column_width=True) st.image(image, caption
코드 설명
Image.open()
: 업로드된 이미지를PIL
을 사용하여 열고,st.image()
로 화면에 표시합니다.use_column_width=True
: 이미지를 화면 크기에 맞게 자동 조정하여 표시합니다.
5. 파일 업로드 후 처리 로직 확장
파일을 업로드한 후 다양한 처리 로직을 추가할 수 있습니다. 예를 들어, 사용자가 업로드한 CSV 파일의 특정 열을 선택하여 그 열의 데이터를 시각화하거나, 텍스트 파일의 내용을 분석하는 등의 작업을 수행할 수 있습니다.
import streamlit as st
import pandas as pd
# 파일 업로더
= st.file_uploader("CSV 파일을 업로드하세요.", type=["csv"])
uploaded_file
if uploaded_file is not None:
# CSV 파일 읽기
= pd.read_csv(uploaded_file)
df
st.write(df)
# 열 선택
= st.selectbox("열을 선택하세요.", df.columns)
selected_column
# 선택한 열의 데이터 출력
f"선택한 열: {selected_column}")
st.write( st.line_chart(df[selected_column])
코드 설명
- 업로드된 CSV 파일을 판다스로 읽고, 그 내용을 화면에 출력합니다.
- 사용자로부터 CSV 파일의 열 중 하나를 선택하게 한 뒤, 해당 열의 데이터를 그래프로 시각화합니다.
결론
Streamlit의 파일 업로드 기능은 매우 유용하며 간단하게 구현할 수 있습니다. 파일을 업로드한 후 다양한 데이터를 분석하거나 시각화하는 애플리케이션을 구축할 수 있습니다. st.file_uploader()
를 사용하면 파일 업로드 기능을 매우 쉽게 추가할 수 있고, 다양한 파일 형식을 지원하므로 유연한 애플리케이션 개발이 가능합니다.
Streamlit을 사용하여 파일 업로드 기능을 더욱 확장하고 싶다면, 업로드된 파일을 데이터베이스에 저장하거나, 머신러닝 모델에 입력하는 등의 고급 기능을 추가해볼 수 있습니다.