[python] tempfile

About_work·2024년 3월 12일
0

python 기초

목록 보기
52/65

1. 설명

  • 임시 파일과 디렉터리를 생성하고 사용할 때 활용
  • 이 모듈은 운영 체제의 기본적인 임시 파일 저장소 위치를 사용하여, 데이터를 일시적으로 저장할 수 있는 파일이나 디렉터리를 만들어낼 수 있게 도와줌
  • tempfile을 사용하는 주된 목적
    • 일시적인 데이터 저장,
    • 복잡한 파일 입출력 작업을 위한 테스트 파일 생성,
    • 시스템의 영구 저장소를 사용하지 않고 데이터를 임시로 처리할 필요가 있을 때

주요 함수 및 클래스

  • tempfile.TemporaryFile():
    • 임시 파일을 생성하고 이를 파일과 같은 객체로 반환
    • 파일은 닫히거나 프로그램이 종료되면 자동으로 삭제
  • tempfile.NamedTemporaryFile():
    • 이름이 있는 임시 파일을 생성하고 파일 객체를 반환
    • 이 이름을 사용하여 파일 시스템에서 파일을 찾을 수 있음
  • tempfile.TemporaryDirectory():
    • 임시 디렉터리를 생성하고, 이의 경로를 반환
    • 디렉터리는 사용이 끝나면 (즉, 객체가 소멸할 때) 자동으로 삭제
  • tempfile.mkstemp():
    • 낮은 수준의 임시 파일 생성 함수
    • 임시 파일을 생성하고 파일 디스크립터와 경로를 튜플로 반환
  • tempfile.mkdtemp():
    • 임시 디렉터리를 생성하고, 이의 경로를 문자열로 반환

사용법 예시

TemporaryFile 사용 예

import tempfile
import os

# 임시 파일 생성 및 사용
with tempfile.TemporaryFile() as temp_file:
    temp_file.write(b'This is a test')
    temp_file.seek(0)
    print(temp_file.read())

# 파일은 이 시점에서 이미 삭제됨

NamedTemporaryFile 사용 예

import tempfile

# 이름이 있는 임시 파일 생성 및 사용
with tempfile.NamedTemporaryFile(delete=False) as temp_file:
    print('Temp file name:', temp_file.name)
    temp_file.write(b'Hello World!')

# 파일을 수동으로 삭제해야 함
import os
os.remove(temp_file.name)

TemporaryDirectory 사용 예

import tempfile
import os

# 임시 디렉터리 생성 및 사용
with tempfile.TemporaryDirectory() as temp_dir:
    print('Temp directory:', temp_dir)
    # 임시 디렉터리 내에서 작업 가능

# 디렉터리는 이 시점에서 이미 삭제됨
  • tempfile 모듈을 사용하면 파일과 디렉터리를 쉽게 관리하면서, 시스템의 영구 저장소를 불필요하게 사용하지 않도록 할 수 있습니다.

2. NamedTemporaryFile 메서드의 return 값의 TYPE

  • tempfile.NamedTemporaryFile() 함수는 이름이 있는 임시 파일을 생성하고, 그 파일을 다룰 수 있는 파일 객체를 반환
  • 반환되는 객체의 타입은 _TemporaryFileWrapper
  • 이 객체는 파일 객체와 유사하게 작동하며, 파일 입출력(IO) 메서드(write(), read(), close() 등)를 포함하고 있습니다.
  • 또한, 이 객체에는 생성된 임시 파일의 이름을 확인할 수 있는 name 속성이 포함되어 있습니다.
  • _TemporaryFileWrapper 객체는 Python의 내장 file 객체와 유사한 인터페이스를 제공하지만, 몇 가지 추가적인 기능(예: 자동 삭제 옵션)을 포함
  • 이 객체를 사용하여 임시 파일에 데이터를 쓰거나 읽을 수 있으며, 작업이 끝난 후 파일은 자동으로 삭제될 수 있습니다(단, delete 매개변수가 True(기본값)일 때).
  • 사용자가 파일을 직접 삭제하기 원한다면, delete=False로 설정하여 NamedTemporaryFile()을 호출할 수 있습니다.

Type annotation of NamedTemporaryFile()?

  • Python에서 _TemporaryFileWrapper를 직접적으로 type annotation에 사용하는 것은 표준 라이브러리에서 직접 제공되지 않습니다.
  • 대신, 일반적으로 IO 타입을 사용하여 파일과 같은 객체에 대한 type annotation을 제공할 수 있습니다.
  • typing 모듈의 IO 타입을 사용하면, 파일 입출력에 사용되는 객체의 타입을 표현할 수 있습니다.
  • 예를 들어, NamedTemporaryFile을 사용하여 반환된 객체에 대한 type annotation을 추가하고자 할 때, 다음과 같이 할 수 있습니다:
from typing import IO
import tempfile

def create_temp_file() -> IO[bytes]:
    return tempfile.NamedTemporaryFile(mode='wb', delete=False)
  • 이 예제에서, create_temp_file 함수는 IO[bytes] 타입의 객체를 반환한다는 것을 명시하고 있습니다.
  • 여기서 mode='wb'는 바이너리 쓰기 모드를 의미합니다.
  • 따라서 IO[bytes]는 바이너리 파일 입출력을 다루는 객체를 나타냅니다.
  • 만약 텍스트 모드로 파일을 다루고자 한다면, IO[str]을 사용할 수 있습니다.
  • 이 방법을 사용하면, Python의 타입 체커는 NamedTemporaryFile에서 반환된 객체가 파일 입출력에 사용될 것으로 예상하는 IO 타입과 호환될 것이라고 이해할 수 있습니다.
  • 그러나 실제 _TemporaryFileWrapper 타입의 세부 사항은 typing.IO를 통해서 완전히 표현되지 않을 수도 있습니다. 이는 주로 typing.IO가 일반적인 파일 입출력 인터페이스를 나타내기 위한 것이기 때문입니다.
profile
새로운 것이 들어오면 이미 있는 것과 충돌을 시도하라.

0개의 댓글