write_temp_csv_with_desc
이 def에서는 csv 파일 생성 시, uploads 경로에 전처리 파일의 임시파일을 생성하게 되는데
이 __prepared__ 파일은 임시로 저장되는 파일이므로
다음에 있을 함수에서 처리하는 작업을 생략하게 된다.
def write_temp_csv_with_desc(rows, headers, base_name, folder):
import csv
base_no_ext = os.path.splitext(base_name)[0] or "upload"
out_name = f"{base_no_ext}_with_desc.csv"
out_path = os.path.join(folder, f"__prepared__{out_name}") # 업로드 폴더에 생성(이벤트는 SKIP)
with open(out_path, "w", newline="", encoding="utf-8-sig") as f:
w = csv.DictWriter(f, fieldnames=headers)
w.writeheader()
for row in rows:
for h in headers:
row.setdefault(h, "")
w.writerow(row)
return out_path, "text/csv", out_name
base_no_ext
- os.path.splitext : base_name에서 확장자를 제거한 파일명 얻음
- "upload" : 값이 비어있다면 "upload"로 대체
out_name
- f"{base_no_ext}_with_desc.csv" : 최종 산출 CSV 이름은 원본명 + _with_desc.csv
out_path
- os.path.join(folder, f"__prepared__{out_name}") : 저장 경로는 같은 folder에 두되, 파일명 앞에 __preapred__를 붙임
- 이 파일은 watcher.py가 스스로 만든 임시 산출물이므로 on_created 이벤트에서 건너뛰게 하려는 명시적 표시
with open(out_path, "w", newline="", encoding="utf-8-sig") as f
- 쓰기 모드로 열게 됨
- newline="" : 파이썬 CSV 모듈 권장, 줄바꿈 자동 보정으로 윈도우에서 빈 줄 삽입 버그 방지
- encoding="utf-8-sig" : BOM 포함 UTF-8, 윈도우 상에서의 엑셀에서 한글 header 및 data가 깨지지 않도록 하는 선택
w = csv.DictWriter(f, fieldnames=headers)
- DictWriter는 dictionary들의 rows를 지정된 header 순서로 CSV에 씀
'프로그래밍 언어 > Python' 카테고리의 다른 글
[ Docker ] Docker Desktop 설치 및 Open WebUI 연결 (0) | 2025.09.04 |
---|---|
[ Python ] Open WebUI 커스터마이징 - file upload(2) (0) | 2025.09.03 |
[ Python ] Open WebUI 커스터마이징 - csv 파일(3) (0) | 2025.09.03 |
[ Python ] Open WebUI 커스터마이징 - csv 파일(1) (1) | 2025.09.03 |