rows_to_markdown_temp
def rows_to_markdown_temp(rows, base_name, folder):
"""CSV 업로드가 400이면 Markdown 표로 우회"""
md_headers = ["id", "이름", "성별", "나이", "desc"]
lines = ["| " + " | ".join(md_headers) + " |",
"| " + " | ".join(["---"] * len(md_headers)) + " |"]
for r in rows:
vals = [str(r.get(k, "")) for k in md_headers]
lines.append("| " + " | ".join(vals) + " |")
md_text = "\n".join(lines)
base_no_ext = os.path.splitext(base_name)[0] or "upload"
out_name = f"{base_no_ext}.md"
data_dir = os.path.join(os.path.dirname(WATCH_DIR), "data")
out_dir = data_dir if os.path.isdir(data_dir) else os.path.dirname(WATCH_DIR)
out_path = os.path.join(out_dir, f"__prepared__{out_name}")
with open(out_path, "w", encoding="utf-8") as f:
f.write(md_text)
return out_path, "text/markdown;charset=utf-8", out_name
md_headers = ["id", "이름", "성별", "나이", "desc"]
- 마크다운 표의 headr를 고정으로 정의
- 원본 CSV에 다른 칼럼이 있어도 여기서는 이 5개만 쓰도록 고정
- add_desc에서 붙인 desc 칼럼을 보여주려는 의도
["---"] * len(md_headers)
- 마크다운 표에서 헤더와 본문 구분하는 구분선 역할
base_no_ext
- os.path.splitext(base_name)[0] : base_name에서 확장자 제거
- "upload" : 확장자가 없으면 upload로 대체
- 확장자가 두 개면 맨 마지막 확장자만 제거
out_name
- f"{base_no_ext}.md" : 업로드용 표시 이름은 .md 확장자
prepare_for_upload
def prepare_for_upload(file_path: str, send_name: str):
lower = file_path.lower()
folder = os.path.dirname(file_path)
# CSV
if lower.endswith(".csv"):
headers, rows = read_csv_rows(file_path)
headers, rows = add_desc(headers, rows)
pth, mim, nm = write_temp_csv_with_desc(rows, headers, send_name, folder)
return pth, mim, nm, rows
# XLSX/XLS
if lower.endswith((".xlsx", ".xls")):
headers, rows = read_xlsx_rows(file_path)
headers, rows = add_desc(headers, rows)
pth, mim, nm = write_temp_csv_with_desc(rows, headers, send_name, folder)
return pth, mim, nm, rows
# 전처리 없음
return None, None, None, None
file_path
- whtche.py가 감지한 원본 파일의 절대 경로
send_name
- 업로드 시 사용할 안전한 파일명, 보통 ascii_safe_filename(...) 결과가 들어와서 non-ASCII가 제거된 상태
read_csv_rows(file_path)
- CSV를 utf-8-sig > utf-8 > cp949 순으로 읽어 headers, rows를 얻음
add_desc(headers, rows)
- 각 행에 desc 칼럼을 만들어 붙이고, header에 desc가 없으면 추가
write_temp_csv_with_desc(...)
- __prepared__..._with_desc.csv라는 임시 CSV를 같은 폴더에 생성
read_xlsx_rows(file_path)
- 첫 shet를 읽어 headers, rows 구성, 계산식은 data_only=True로 읽음
write_temp_csv_with_desc(...)
- 엑셀을 CSV로 변환 + desc 포함
(None, None, None, None)
- 그 외의 확장자는 전처리 하지 않고 None으로 반환
'프로그래밍 언어 > Python' 카테고리의 다른 글
[ Docker ] Docker Desktop 설치 및 Open WebUI 연결 (0) | 2025.09.04 |
---|---|
[ Python ] Open WebUI 커스터마이징 - file upload(2) (0) | 2025.09.03 |
[ Python ] Open WebUI 커스터마이징 - csv 파일(2) (0) | 2025.09.03 |
[ Python ] Open WebUI 커스터마이징 - csv 파일(1) (1) | 2025.09.03 |