본문 바로가기

Github & Streamlit

Streamlit 문법: 파일 업로드 함수

반응형
import os
import streamlit as st
import pandas as pd
from PIL import Image
import os
from datetime import datetime

- 파일 업로드 함수

- 디렉토리 정보와 파일을 알려주면, 해당 디렉토리에

- 파일을 저장하는 함수

def save_uploaded_file(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())

    return st.success("Saved file : {} in {}".format(file.name, directory))

 

 

def main():
    st.title('여러 파일 한번에 업로드하는 앱')

    # 사이드바용 메뉴
    menu = ['Image','CSV','About']
    choice = st.sidebar.selectbox('메뉴',menu)

 

    if choice == menu[0]:
        # accept_multiple_files을 True로 셋팅하면, 여러 파일들을 한꺼번에 받을 수 있다.
        upload_files = st.file_uploader('이미지 파일을 선택', type=['jpg','png','jpeg'],
                                        accept_multiple_files=True)

        if upload_files is not None:
             for file in upload_files:
                # 파일명을 유니크하게 만들어서 저장: 현재시간을 활용
                current_time = datetime.now()
                new_filename = current_time.isoformat().replace(':','_')+ '.png'
                file.name = new_filename
          # 파일을 여러개 올리면, 이 파일들을 temp에 저장하고, 이미지로 읽어서 화면에 표시!
                save_uploaded_file('temp',file)

            # 저장이 다 끝나면, 웹브라우져에 이미지 표시
            for file in upload_files:
                img = Image.open(file)
                st.image(img)

(streamlit 결과물)

 

(streamlit 파일 업로드 후의 화면)

 

-  파일을 여러개 올리면, 이 파일들을 temp에 저장하고, 데이터프레임으로 읽어서 화면에 표시!

    elif choice == menu[1]:
        upload_csv = st.file_uploader('CSV 파일을 선택',type = ['csv'], accept_multiple_files = True)
 
        if upload_csv is not None:
            for file in upload_csv:
                current_time = datetime.now()
                new_filename = current_time.isoformat().replace(':','_') + '.csv'
                file.name = new_filename
                save_uploaded_file('temp',file)
           
            for file in upload_csv:
                df = pd.read_csv(file)
                st.dataframe(df)
   

if __name__ == '__main__':
    main()

(streamlit 결과물)

 

(streamlit 파일 업로드 후의 화면)

 

 

반응형