Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python tempfile 모듈로 임시 파일 및 디렉토리 생성하는 방법

파이썬 표준 라이브러리의 tempfile 모듈은 임시 파일과 임시 디렉토리를 생성할 수 있는 다양한 함수를 제공합니다. 이렇게 생성된 파일과 디렉토리는 운영체제의 파일 시스템이 지정한 특수 임시(temp) 디렉토리에 저장됩니다. 예를 들어 Windows에서는 profile/AppData/Local/Temp 폴더를 사용하고, Linux에서는 일반적으로 /tmp 디렉토리에 임시 파일이 보관됩니다.

이 글에서는 tempfile 모듈에서 제공하는 주요 함수들을 하나씩 살펴보겠습니다.

TemporaryFile()

TemporaryFile() 함수는 임시 디렉토리 안에 임시 파일을 생성하고, 내장 open() 함수와 유사한 파일 객체를 반환합니다. 기본적으로 wb+ 모드로 열리기 때문에 바이너리 데이터를 읽고 쓸 수 있습니다. 가장 중요한 특징은 파일 객체를 닫는(close) 순간 임시 폴더에 남아 있는 해당 파일이 자동으로 삭제된다는 점입니다.

다음 코드는 TemporaryFile() 함수의 기본적인 사용 예입니다.

>>> import tempfile
>>> f = tempfile.TemporaryFile()
>>> f.write(b'Welcome to TutorialsPoint')
>>> import os
>>> f.seek(os.SEEK_SET)
>>> f.read()
b'Welcome to TutorialsPoint'
>>> f.close()

다음 예제처럼 mode를 w+로 지정하면 바이너리 데이터 대신 텍스트 데이터를 쓰고 읽을 수도 있습니다.

>>> ff = tempfile.TemporaryFile(mode = 'w+')
>>> ff.write('hello world')
>>> ff.seek(0)
>>> ff.read()
'hello world'
>>> ff.close()

NamedTemporaryFile()

NamedTemporaryFile() 함수는 TemporaryFile()과 거의 동일하게 동작하지만, 한 가지 차이점이 있습니다. 무작위(random) 파일명을 가진 실제 파일이 운영체제의 임시 폴더에 그대로 노출된다는 점입니다. 생성된 파일명은 파일 객체의 name 속성으로 확인할 수 있으며, 이 파일 역시 닫히는 즉시 자동으로 삭제됩니다.

>>> fo = tempfile.NamedTemporaryFile()
>>> fo.name
'C:\\Users\\acer\\AppData\\Local\\Temp\\tmpipreok8q'
>>> fo.close()

TemporaryDirectory()

TemporaryDirectory() 함수는 임시 디렉토리를 생성합니다. dir 매개변수를 사용하면 임시 디렉토리가 만들어질 위치를 직접 지정할 수 있습니다. 아래 문장은 C:\python36 폴더 안에 임시 디렉토리를 생성합니다.

>>> f = tempfile.TemporaryDirectory(dir = "C:/python36")
<TemporaryDirectory 'C:/python36\\ tmp9wrjtxc_'>

생성된 디렉토리는 지정한 폴더 안에 나타나며, 디렉토리 객체의 cleanup() 메서드를 호출하면 삭제됩니다.

>>> f.name
'C:/python36\\tmp9wrjtxc_'
>>> f.cleanup()

mkstemp()

mkstemp() 함수 역시 TemporaryFile()과 마찬가지로 임시 파일을 생성하지만, 추가로 suffix(확장자)와 prefix(접두사) 매개변수를 통해 생성되는 임시 파일의 이름 형식을 지정할 수 있다는 장점이 있습니다. 단, TemporaryFile()과 달리 생성된 파일이 자동으로 삭제되지 않으므로 사용 후 반드시 수동으로 제거해야 합니다.

>>> f = tempfile.mkstemp(suffix = '.tp')
C:\Users\acer\AppData\Local\Temp\tmpbljk6ku8.tp

mkdtemp()

mkdtemp() 함수는 운영체제의 임시 폴더 안에 임시 디렉토리를 생성하고 그 절대 경로명을 반환합니다. dir 매개변수를 사용하면 생성 위치를 명시적으로 지정할 수 있습니다. 이 함수로 만든 폴더 역시 자동으로 삭제되지 않습니다.

>>> tempfile.mkdtemp(dir = "c:/python36")
'c:/python36\\tmpruxmm66u'

gettempdir()

gettempdir() 함수는 임시 파일을 저장하는 데 사용되는 디렉토리의 이름을 반환합니다. 이 경로는 일반적으로 tempdir 환경 변수에서 가져옵니다. Windows 플랫폼에서는 보통 user/AppData/Local/Temp, windowsdir/temp 또는 systemdrive/temp 중 하나이며, Linux에서는 대개 /tmp입니다. 이 디렉토리는 앞서 살펴본 함수들의 dir 매개변수 기본값으로도 사용됩니다.

>>> tempfile.gettempdir()
'C:\\Users\\acer\\AppData\\Local\\Temp'

지금까지 파이썬 tempfile 모듈에서 제공하는 주요 함수들의 특징과 사용 방법을 살펴보았습니다. 상황에 따라 자동 삭제가 필요하면 TemporaryFile()이나 NamedTemporaryFile()을, 경로와 수명 관리가 필요하면 mkstemp()mkdtemp()를 활용하면 됩니다.