본문 바로가기
Python/Streamlit

[Python] Streamlit 이미지, csv 파일 업로드 하는 방법

by dong_su 2023. 11. 21.
# 해당 디렉토리에 파일을 저장해 주는 함수
def save_uploaded_file(directory, file) :
    # 1. 위의 directory가 있는지 확인 후 없으면 새로 생성
    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. 파일 저장 성공했으니까 화면에 보여준다    
    return st.success(f"{directory}에 {file.name}이 저장됐습니다.")

-> 해당 디렉토리에 파일을 저장해주는 함수 정의

 

def main() :
    st.title("파일 업로드 프로젝트")
    # sidebar = 왼쪽 사이드 바 사용
    choice = st.sidebar.selectbox("메뉴", ["Image","CSV"])

    if choice == "Image" :
        st.subheader("이미지 파일 업로드")

        # file_uploader(이름(제목) , type=파일타입)
        file = st.file_uploader("이미지파일을 업로드하세요", type=["jpg","jpeg","png"])
        
        # 파일이 업로드 되었을 때 
        if file is not None :
            # 파일명이 같으면 덮어쓰기 때문에 새로운 이름을 만든다.
            current_time = datetime.now()
            # isoformat() = 문자열로 바꿔줌
            file.name = current_time.isoformat().replace(":", "_").replace(".", "_") + ".jpg"

            save_uploaded_file("tmp", file)

            # 웹에 저장된 이미지파일 띄우기
            img = Image.open(file)
            st.image(img)

    elif choice == "CSV" :
        st.subheader("CSV 파일 업로드")

        file = st.file_uploader("CSV 파일 업로드", type=["csv"])
        
        # 파일이 업로드 되었을 때 
        if file is not None :
            # 파일명이 같으면 덮어쓰기 때문에 새로운 이름을 만든다.
            current_time = datetime.now()
            # isoformat() = 문자열로 바꿔줌
            file.name = current_time.isoformat().replace(":", "_").replace(".", "_") + ".csv"

            save_uploaded_file("csv", file)

            # csv 파일을 데이터프레임으로 읽어서 웹에 보여준다.
            df = pd.read_csv(file)
            st.dataframe(df)

-> sidebar = 화면 좌측 사이드바

-> st.file_uploader("내용" , type=[업로드 가능한 파일의 확장자])

파일명이 같으면 덮어쓰기 되어버리기 때문에, 파일명 + 업로드한 시간으로 새로운 파일명을 만들어 저장한다.

-> isoformat() = 타입을 문자열로 바꿔주는 함수, replace() = 문자 바꾸는 함수


결과 1 . 이미지 파일 업로드 했을 때

결과 ) 이미지 파일 업로드 했을 시

 

결과 2 . csv 파일 업로드 했을 때

결과 ) csv 파일 업로드 했을 시