- Flask Blueprint 아키텍처로 전환 (dashboard, upload, backup, status) - app.py 681줄 95줄로 축소 (86% 감소) - HTML 템플릿 모듈화 (base.html + 기능별 templates) - CSS/JS 파일 분리 (common + 기능별 파일) - 대시보드 기능 추가 (통계, 주간 예보, 방문객 추이) - 파일 업로드 웹 인터페이스 구현 - 백업/복구 관리 UI 구현 - Docker 배포 환경 개선 - .gitignore 업데이트 (uploads, backups, cache 등)
44 lines
1.5 KiB
Python
44 lines
1.5 KiB
Python
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() |