# ํ์ผ์ ์
๋ก๋ ํ๋ ๋ฐฉ๋ฒ
# ์ด๋ฏธ์ง ํ์ผ ์
๋ก๋, csv ํ์ผ ์
๋ก๋
import streamlit as st
from datetime import datetime # ํ์ฌ์๊ฐ์ ๊ฐ์ ธ์์ ์ ๋ํฌํ ํ์ผ๋ช
์ ๋ง๋๋๋ฐ ์ฌ์ฉํ ๋ชฉ์ ์ผ๋ก ์ํฌํธ
import pandas as pd
from PIL import Image
# ๋๋ ํ ๋ฆฌ ์ ๋ณด์ ํ์ผ์ ์๋ ค์ฃผ๋ฉด
# ํด๋น ๋๋ ํ ๋ฆฌ์ ํ์ผ์ ์ ์ฅํ๋ ํจ์
def save_uploaded_file(directory, file):
# 1. ๋๋ ํ ๋ฆฌ๊ฐ ์๋์ง ํ์ธํ์ฌ ์์ผ๋ฉด ๋๋ ํ ๋ฆฌ๋ถํฐ ๋ง๋ ๋ค.
import os
if not os.path.exists(directory):
os.makedirs(directory)
# 2. ๋๋ ํ ๋ฆฌ๊ฐ ์กด์ฌํ๋ฉด, ํ์ผ์ ์ ์ฅํ๋ค.
with open(os.path.join(directory, file.name), 'wb') as f: # with expression as ๋ณ์๋ช
=> ์ฌ์ฉ์๊ฐ close()๋ฅผ ํ์ง ์์๋ ์๋์ผ๋ก ํ์ผ์ ๋ซ์์ค
f.write(file.getbuffer())
# 3. ์ ์ฅ์ด ์๋ฃ๋๋ฉด ์ ์ ํํ
์๋ฆฐ๋ค.
return st.success(f"{file.name} ์ด {directory} ์ ์ ์ฅ๋์์ต๋๋ค.")
def main():
# ์ฌ์ด๋๋ฐ ๋ง๋ค๊ธฐ
st.title('ํ์ผ ์
๋ก๋ ํ๋ก์ ํธ')
sidebar_menu = ['์ด๋ฏธ์งํ์ผ ์
๋ก๋', 'csv ์
๋ก๋', 'About']
choice = st.sidebar.selectbox('๋ฉ๋ด', sidebar_menu)
if choice == sidebar_menu[0]: # ์ด๋ฏธ์งํ์ผ ์
๋ก๋ ๋ฉ๋ด๋ฅผ ์ ํํ์์
st.subheader('์ด๋ฏธ์ง ํ์ผ ์
๋ก๋!')
file = st.file_uploader('์ด๋ฏธ์ง ํ์ผ์ ์ ํํ์ธ์.', type=['jpg', 'png', 'jpeg']) # ์ด๋ฏธ์งํ์ผ ํ์์ ํ๋๋ง ํ์ฉํ ๊ฑฐ๋ฉด ๊ทธ๋ฅ ์ฐ๋ฉด ๋๊ณ ์ฌ๋ฌ๊ฐ๋ฅผ ํ์ฉํ ์์๋ [] ๋ฆฌ์คํธ๋ก ์์ฑ
if file is not None: # ์ ์ ๊ฐ ์ฌ๋ฆฐ ํ์ผ์ด ์กด์ฌํ ๋๋ง ์๋ฒ์ ์ ์ฅํ๋ค.
print(file.name) # ํ์ผ ์ด๋ฆ
print(file.size) # ํ์ผ ํฌ๊ธฐ
print(file.type) # ํ์ผ ํ์
# ํ์ผ์ ์๋ฒ์ ์ ์ฅํ๊ธฐ ์ํด์๋ ๋จผ์ !
# ํ์ผ ์ด๋ฆ์ ์ ๋ํฌํ๊ฒ ๋ง๋ค์ด์ ๋ฐ๊ฟ์ค์ผ ํ๋ค.
# "ํ์ฌ์๊ฐ + ์ ์ ์์ด๋" ๋ฅผ ์กฐํฉํด์ ๋ง๋๋๊ฒ ์ค๋ฌด์์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ
current_time = datetime.now()
new_filename = current_time.isoformat().replace(':', '_') + '.jpg'
# .isoformat() ์ ํด์ฃผ๋ฉด datetimeํ์์ ๋ฌธ์์ด๋ก ๋ณํํด์ค
# ํ์ผ๋ช
์๋ :(์ฝ๋ก ) ์ด ํฌํจ๋ ์ ์์. => replace()๋ฅผ ์ด์ฉํ์ฌ : ์ _ ๋ก ๋ฐ๊ฟ์ค
# .jpg๋ฅผ ๋ถ์ฌ์ jpgํ์์ผ๋ก ํต์ผํด์ ์ ์ฅ
file.name = new_filename
save_uploaded_file('image', file) # ํ์ผ์ image๋๋ ํ ๋ฆฌ์ ์ ์ฅ
# ์ด๋ฏธ์ง ์
๋ก๋
# 1. ์ฒซ๋ฒ์งธ ๋ฐฉ๋ฒ
st.image(file, use_column_width=True) # use_column_width=True๋ฅผ ํด์ฃผ๋ฉด ์๋์ผ๋ก ํญ์ ๋ง์ถฐ์ค
# 2. ๋๋ฒ์งธ ๋ฐฉ๋ฒ
img = Image.open(file)
st.image(img)
elif choice == sidebar_menu[1]: # csv ์
๋ก๋ ๋ฉ๋ด๋ฅผ ์ ํํ์์
st.subheader('CSVํ์ผ ์
๋ก๋!')
csv_file = st.file_uploader('CSV ํ์ผ์ ์ ํํ์ธ์', type='csv') # ์ด๋ฏธ์ง ์
๋ก๋ํ ๋์ ๋์ผํ ๋ฐฉ์
if csv_file is not None :
# ํ์ผ๋ช
์ ์ ๋ํฌ ํ๊ฒ ๋ง๋ค์ด์ ์ ์ฅํ๋ค
current_time = datetime.now()
new_filename = current_time.isoformat().replace(':', '_') + '.csv' # ์ ๋ํฌํ ํ์ผ๋ช
(ํ์ฌ์๊ฐ)์ผ๋ก ์ ์ฅ
csv_file.name = new_filename # csv_file ์ด๋ฆ์ new_filename์ผ๋ก ๋ณ๊ฒฝ
save_uploaded_file('data', csv_file) # data๋๋ ํ ๋ฆฌ๋ก csv_file ์ ์ฅ
st.dataframe(pd.read_csv(csv_file))
elif choice == sidebar_menu[2]: # About ๋ฉ๋ด ์ ํ์
st.subheader('ํ์ผ ์
๋ก๋ ํ๋ก์ ํธ์
๋๋ค.')
else:
pass
if __name__ == '__main__':
main()
VScode์ ๊ฐ๋ณด๋ฉด,
์ด๋ก์์ด ์๋ก ์ ์ฅ๋ ์ด๋ฏธ์ง, csv ํ์ผ์ด๋ค.