feat: Flask 애플리케이션 모듈화 및 웹 대시보드 구현
- Flask Blueprint 아키텍처로 전환 (dashboard, upload, backup, status) - app.py 681줄 95줄로 축소 (86% 감소) - HTML 템플릿 모듈화 (base.html + 기능별 templates) - CSS/JS 파일 분리 (common + 기능별 파일) - 대시보드 기능 추가 (통계, 주간 예보, 방문객 추이) - 파일 업로드 웹 인터페이스 구현 - 백업/복구 관리 UI 구현 - Docker 배포 환경 개선 - .gitignore 업데이트 (uploads, backups, cache 등)
This commit is contained in:
44
lib/to_csv.py
Normal file
44
lib/to_csv.py
Normal file
@ -0,0 +1,44 @@
|
||||
import os, sys
|
||||
import shutil
|
||||
import pandas as pd
|
||||
|
||||
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
|
||||
from lib.common import get_logger
|
||||
|
||||
logger = get_logger("TO_CSV")
|
||||
|
||||
DATA_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "data"))
|
||||
FINISH_DIR = os.path.join(DATA_DIR, "finish")
|
||||
os.makedirs(FINISH_DIR, exist_ok=True)
|
||||
|
||||
def convert_excel_to_csv(filepath):
|
||||
try:
|
||||
logger.info(f"변환 시작: {os.path.basename(filepath)}")
|
||||
df = pd.read_excel(filepath, header=1) # 2행이 헤더
|
||||
df.columns = [col.strip() for col in df.columns]
|
||||
|
||||
csv_path = filepath + '.csv'
|
||||
df.to_csv(csv_path, index=False, encoding='utf-8-sig')
|
||||
logger.info(f"변환 완료: {os.path.basename(csv_path)}")
|
||||
|
||||
# 변환 완료된 원본 엑셀 파일 이동
|
||||
dest_path = os.path.join(FINISH_DIR, os.path.basename(filepath))
|
||||
shutil.move(filepath, dest_path)
|
||||
logger.info(f"원본 엑셀 파일 이동 완료: {os.path.basename(dest_path)}")
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"변환 실패: {os.path.basename(filepath)} - {e}")
|
||||
|
||||
def main():
|
||||
files = [os.path.join(DATA_DIR, f) for f in os.listdir(DATA_DIR)
|
||||
if (f.endswith(('.xls', '.xlsx')) and f.startswith("영수증별 상세매출"))]
|
||||
|
||||
logger.info(f"총 {len(files)}개 엑셀 파일 변환 시작")
|
||||
|
||||
for filepath in files:
|
||||
convert_excel_to_csv(filepath)
|
||||
|
||||
logger.info("모든 파일 변환 완료")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user