파이썬 tempfile 완전 정복 🗂️ — 안전한 임시 파일·폴더 만들기
파이썬 tempfile 완전 정복 🗂️
임시 파일을 직접 open('tmp.txt') 같은 방식으로 만들면 이름 충돌이나 보안 이슈가 발생할 수 있습니다.
tempfile 모듈은 운영체제 안전 규칙을 따라 임시 파일·폴더를 만들어주고,
자동 삭제까지 관리합니다.
1) NamedTemporaryFile — 임시 파일
import tempfile
# 컨텍스트 매니저: 종료 시 자동 삭제
with tempfile.NamedTemporaryFile(mode="w+", suffix=".txt") as tmp:
print("임시 파일 경로:", tmp.name)
tmp.write("Hello Tempfile!")
tmp.seek(0)
print(tmp.read())
# 블록을 벗어나면 파일 자동 삭제
delete=False 옵션을 주면 자동 삭제되지 않고 남겨집니다.
2) TemporaryDirectory — 임시 디렉터리
import tempfile, pathlib
with tempfile.TemporaryDirectory() as tmpdir:
print("임시 디렉터리:", tmpdir)
p = pathlib.Path(tmpdir) / "file.txt"
p.write_text("inside temp dir")
# 블록 종료 시 tmpdir 자동 삭제
3) 저수준 API: mkstemp, mkdtemp
import tempfile, os
fd, path = tempfile.mkstemp(suffix=".log") # 파일 디스크립터 + 경로 반환
print("생성된 임시 파일:", path)
os.close(fd) # 직접 닫아야 함
os.remove(path)
d = tempfile.mkdtemp(prefix="session_")
print("생성된 임시 디렉터리:", d)
# 직접 삭제 필요: os.rmdir(d) 또는 shutil.rmtree(d)
4) 임시 경로 확인 & 변경
import tempfile
print(tempfile.gettempdir()) # 시스템 기본 임시 폴더 경로
print(tempfile.gettempprefix()) # 파일명 접두사 기본값
5) 실전 예제
5-1. 업로드 파일 임시 저장 후 처리
import tempfile, shutil
def handle_upload(src_path):
with tempfile.NamedTemporaryFile(delete=False, suffix=".bin") as tmp:
shutil.copy(src_path, tmp.name)
print("업로드 임시 저장:", tmp.name)
return tmp.name
5-2. 테스트 실행 중 임시 디렉터리 활용
import tempfile, pathlib
def run_test():
with tempfile.TemporaryDirectory() as tmpdir:
p = pathlib.Path(tmpdir) / "output.txt"
p.write_text("테스트 결과")
# 테스트가 끝나면 디렉터리 자동 정리
return p.read_text()
5-3. 임시 파일을 로그 핸들러로 쓰기
import tempfile, logging
with tempfile.NamedTemporaryFile(delete=False, suffix=".log") as tmp:
handler = logging.FileHandler(tmp.name)
logger = logging.getLogger("tmp")
logger.addHandler(handler)
logger.warning("임시 로그 기록")
print("로그 파일 위치:", tmp.name)
요약
NamedTemporaryFile → 임시 파일, TemporaryDirectory → 임시 디렉터리
with 구문을 쓰면 종료 시 자동 삭제
mkstemp/mkdtemp는 저수준 API로 직접 정리 필요
- 임시 위치는
gettempdir()로 확인 가능
- 보안성과 유니크 파일명 보장이 장점
자주 묻는 질문(FAQ)
Q1. Windows에서도 잘 동작하나요?
A. 네. cross-platform으로 동작합니다. 단, Windows에서는 NamedTemporaryFile을 열면 다른 프로세스가 접근 못 하는 제약이 있어요.
Q2. 임시 파일을 특정 위치에 만들고 싶어요.
A. dir 파라미터에 경로를 넘기면 해당 위치에 생성됩니다.
댓글
댓글 쓰기