본문 바로가기

안녕하세요!

프로그래밍 언어/Python

[ Python ] Open WebUI 커스터마이징 - csv 파일(2)

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에 씀

 


loading