Python에서 임시 파일 만들기
-
tempfile
모듈을 사용하여 Python에서 임시 파일 생성 - Python에서 명명된 임시 파일 만들기
-
mkstemp
기능을 사용하여 Python에서 임시 파일 만들기 - Python에서 임시 디렉토리 생성
이 문서에서는 Python에서 임시 파일 및 디렉터리를 만드는 방법을 설명합니다. Python의 임시 파일은 tempfile
모듈을 사용하여 생성됩니다.
이 기사에서는 TemporaryFile
, NamedTemporaryFile
, mkstemp
및 TemporaryDirectory
인 tempfile
의 네 가지 하위 기능에 대해서도 설명합니다.
tempfile
모듈을 사용하여 Python에서 임시 파일 생성
이 함수는 Python에서 안전하게 생성된 임시 파일을 생성하고 임시로 사용할 수 있는 파일과 유사한 저장 영역을 반환합니다. 닫히는 즉시 소멸됩니다(객체가 가비지 수집될 때 암시적 닫기 포함).
이 함수를 사용하여 Python에서 임시 파일을 만드는 구문은 다음과 같습니다.
file = tempfile.TemporaryFile()
# OR
file = tempfile.TemporaryFile(
mode="w+b", # Remains as Default mode if not mentioned
suffix=None, # adds a suffix to file name
prefix=None, # adds prefix to file name
# etc.
)
Python의 이 임시 파일은 컨텍스트 완료(with
블록) 또는 파일 개체 파괴 file.close()
시 파일 시스템에서 삭제됩니다. 모드 매개변수의 기본값이 w+b
이기 때문에 새 파일을 닫지 않고 읽고 쓸 수 있습니다.
저장된 데이터에 관계없이 모든 시스템에서 일관성을 유지하기 위해 바이너리 모드로 작동합니다. 버퍼링, 인코딩, 오류 및 줄 바꿈과 같은 일부 추가 용어는 매개 변수 내에서 사용할 수 있는 파이썬 내장 함수 open()
의 일부입니다.
아래 프로그램은 TemporaryFile()
을 사용하여 Python에서 임시 파일을 만드는 방법을 보여줍니다.
코드의 첫 번째 줄은 라이브러리 패키지 tmpfile
을 가져옵니다. tempfile.TemporaryFile()
함수를 사용하여 임시 파일을 생성하는 filepath
변수가 생성됩니다.
데이터는 filepath.write()
기능을 사용하여 임시 파일 내부에 기록됩니다. 이 매개변수는 바이트 유형 값만 사용하므로 리터럴 b
가 문자열 앞에 추가됩니다.
filepath.seek(0)
함수는 길이 0부터 시작하는 파일 스트림의 파일을 로드합니다.
인쇄 변수 filepath
는 개체의 주소를 보여줍니다. 임시 파일의 파일 이름을 확인하기 위해 filepath.name()
함수가 인쇄됩니다.
filepath.read()
함수는 임시 파일에서 데이터를 읽은 다음 인쇄합니다. 마지막으로 filepath.close()
를 사용하여 임시 파일 개체를 해제합니다.
import tempfile
filepath = tempfile.TemporaryFile()
filepath.write(b"Writing some stuff")
filepath.seek(0)
print(filepath)
print(filepath.name)
print(filepath.read())
filepath.close()
출력:
"C:\Users\Win 10\venv\Scripts\python.exe" "C:/Users/Win 10/main.py"
<tempfile._TemporaryFileWrapper object at 0x00000285D92DAC50>
C:\Users\WIN10~1\AppData\Local\Temp\st.cq3d03ezloraine
b'Hello world!'
Process finished with exit code 0
다른 프로그램을 살펴보자.
여기서 filepath
변수는 TemporaryFile
하위 기능의 세 가지 매개변수를 사용합니다. 모드는 읽기와 쓰기를 의미하는 w+b
로 설정됩니다.
또한 접두사 st.
파일 이름에 접미사 loarine
이 추가됩니다. 데이터가 임시로 기록되고 파일 이름이 인쇄됩니다.
import tempfile
filepath = tempfile.TemporaryFile(
mode="w+b",
prefix="st.", # adds prefix to file name
suffix="loraine", # adds a suffix to file name
)
filepath.write(b"Hello world!")
print(filepath.name)
filepath.close()
파일 이름에 접두사와 접미사가 추가된 것을 볼 수 있습니다.
"C:\Users\Win 10\venv\Scripts\python.exe" "C:/Users/Win 10/main.py"
C:\Users\WIN10~1\AppData\Local\Temp\st.kepthvu_loraine
Process finished with exit code 0
프로그램 종료 시 임시 파일이 명시적으로 닫혀 있음을 알 수 있습니다. 이렇게 하면 파일이 닫히지만 삭제되지는 않습니다.
파일을 닫은 후에도 파일 이름을 표시할 수 있지만 내용을 로드할 수는 없습니다.
Python에서 닫힌 임시 파일을 읽거나 쓰면 일반 파일과 마찬가지로 값 오류가 발생합니다.
import tempfile
filepath = tempfile.TemporaryFile(
mode="w+b",
prefix="st.", # adds prefix to file name
suffix="loraine", # adds a suffix to file name
)
filepath.write(b"Hello world!")
filepath.close()
print(filepath.name)
filepath.write(b"Hello world!")
출력:
"C:\Users\Win 10\venv\Scripts\python.exe" "C:/Users/Win 10/main.py"
C:\Users\WIN10~1\AppData\Local\Temp\st.f7n0s5a6loraine
Traceback (most recent call last):
File "C:/Users/Win 10/main.py", line 14, in <module>
filepath.write(b'Hello world!')
File "C:\Python36\lib\tempfile.py", line 485, in func_wrapper
return func(*args, **kwargs)
ValueError: write to closed file
Process finished with exit code 1
Python에서 명명된 임시 파일 만들기
이 함수와 TemporaryFile()
의 유일한 차이점은 파일이 파일 시스템에서 볼 수 있는 이름을 갖도록 보장한다는 것입니다. 이 이름은 객체가 반환될 때 name
속성에서 찾을 수 있습니다.
UNIX에서는 이전 파일이 이미 열려 있어도 같은 이름을 사용하여 다른 임시 파일을 열 수 있지만 Windows에서는 금지되어 있습니다.
기본적으로 Python의 임시 파일은 닫히는 즉시 제거되도록 설정되어 있지만 delete = False
를 설정하여 끌 수 있습니다. 일반 파일과 유사하게 이 파일류 객체는 명령문에서 사용할 수 있습니다.
이 하위 기능을 사용하는 구문은 다음과 같습니다.
tmp = tempfile.NamedTemporaryFile()
# OR
tmp = tempfile.NamedTemporaryFile(mode="w+b", delete=False, suffix=None, prefix=None)
Python에서 이름이 지정된 임시 파일을 만들려면 아래 프로그램을 사용하십시오.
이 프로그램은 여기에서 os
및 tempfile
이라는 두 개의 라이브러리 패키지를 가져옵니다. 임시 파일은 tempo_file
변수를 사용하여 생성되고 delete
매개변수는 False
로 설정되며 접두사와 접미사가 제공됩니다.
try
블록 내에서 print(tempo_file)
를 사용하여 파일 개체가 인쇄됩니다. 그런 다음 print(tempo_file.name)
을 사용하여 파일 이름을 인쇄합니다.
tempo_file.write()
함수는 이 임시 파일에 쓰는 데 사용됩니다.
finally
블록 내에서 파일은 tempo_file.close()
를 사용하여 닫힙니다. 그런 다음 os.unlink()
함수를 사용하여 파일 이름이 파일 개체에서 연결 해제됩니다.
import os
import tempfile
tempo_file = tempfile.NamedTemporaryFile(delete=False, prefix="Ice", suffix="cream")
try:
print(tempo_file)
print(tempo_file.name)
tempo_file.write(b"Peacock is national bird of India")
finally:
tempo_file.close()
os.unlink(tempo_file.name)
출력:
"C:\Users\Win 10\venv\Scripts\python.exe" "C:/Users/Win 10/main.py"
<tempfile._TemporaryFileWrapper object at 0x000001DE90935C18>
C:\Users\WIN10~1\AppData\Local\Temp\Icez5eghui0cream
Process finished with exit code 0
위의 프로그램에서 delete
매개변수는 False
로 바뀌었습니다. 즉, 암시적으로 닫히지 않으면 열린 상태로 유지됩니다. delete
매개변수가 True
로 설정되면 파일이 닫힌 후 파일 이름에 액세스할 수 없습니다.
import os
import tempfile
tempo_file = tempfile.NamedTemporaryFile(delete=True)
try:
print(tempo_file.name)
finally:
tempo_file.close()
os.unlink(tempo_file.name)
print(tempo_file.name)
출력:
"C:\Users\Win 10\venv\Scripts\python.exe" "C:/Users/Win 10/ain.py"
C:\Users\WIN10~1\AppData\Local\Temp\tmp6j3xxjzr
Traceback (most recent call last):
File "C:/Users/Win 10/main.py", line 14, in <module>
os.unlink(tempo_file.name)
FileNotFoundError: [WinError 2] The system cannot find the file specified:'C:\\Users\\WIN10~1\\AppData\\Local\\Temp\\tmp6j3xxjzr'
Process finished with exit code 1
with
블록은 파일을 자동으로 닫으므로 유용합니다.
import tempfile
with tempfile.TemporaryFile(delete=True) as tempo_file:
print(tempo_file)
print(tempo_file.name)
tempo_file.write(b"Peacock is national bird of India")
print(tempo_file.read())
출력:
"C:\Users\Win 10\venv\Scripts\python.exe" "C:/Users/Win 10/main.py"
<tempfile._TemporaryFileWrapper object at 0x0000027EB1C09390>
C:\Users\WIN10~1\AppData\Local\Temp\tmpzk_gpkau
Traceback (most recent call last):
File "C:/Users/Win 10/main.py", line 11, in <module>
print(tempo_file.read())
File "C:\Python36\lib\tempfile.py", line 485, in func_wrapper
return func(*args, **kwargs)
ValueError: read of closed file
Process finished with exit code 1
mkstemp
기능을 사용하여 Python에서 임시 파일 만들기
이 함수는 Python에서 임시 파일을 생성할 수 있는 최고 수준의 보안을 제공합니다. 파일을 생성한 사용자 ID만 파일을 읽고 쓸 수 있습니다.
플랫폼이 파일이 실행 가능한지 여부를 결정하기 위해 권한 비트를 사용하는 경우 아무도 파일을 실행할 수 없습니다. 자식 프로세스도 파일 설명자를 상속하지 않습니다.
mkstemp
에 사용되는 구문은 다음과 같습니다.
tempfile.mkstemp(suffix=None, prefix=None, dir=None, text=False)
TemporaryFile()
함수와 달리 mkstemp()
가 사용될 때 프로그래머는 암시적으로 임시 파일을 삭제해야 합니다. 함수에는 prefix
, suffix
및 dir
매개변수에 대한 고유한 역할이 있습니다.
그들을 보자.
None
으로 설정되지 않은 경우 파일 이름은 지정된 접미사로 끝납니다. 그렇지 않으면 하나도 없을 것입니다. mkstemp()
는 파일 이름과 접미사 사이에 점을 넣지 않기 때문에 필요한 경우 접미사 시작 부분에 점을 넣어야 합니다.
파일 이름은 None
대신 접두사가 있는 경우 접두사로 시작합니다. 그렇지 않으면 기본 접두사가 사용됩니다. gettempprefix()
또는 gettempprefixb()
에서 반환된 값은 어느 프로그램이 적절해 보이는지 기본값으로 사용됩니다.
dir
은 임시 파일의 디렉토리를 저장합니다. dir
이 None
으로 설정되지 않은 경우 지정된 디렉토리에 파일이 생성됩니다. 그렇지 않으면 기본 디렉토리가 사용됩니다.
기본 디렉토리는 플랫폼에 따라 다릅니다.
TMPDIR
, TEMP
또는 TMP
환경 변수를 변경하여 애플리케이션 사용자는 해당 플랫폼별 목록에서 기본 디렉토리 선택을 재정의할 수 있습니다.
suffix
, prefix
및 dir
은 None
으로 설정되지 않은 경우 모두 같은 유형이어야 합니다. 이것이 바이트이면 반환되는 이름은 str
이 아닌 바이트입니다.
suffix=b
를 전달하면 기본 동작 대신 반환 값에 바이트가 강제 적용됩니다.
텍스트가 지정되고 True
인 경우 파일이 텍스트 모드로 열립니다. False
로 설정하면 시스템은 기본적으로 바이너리 모드로 파일을 엽니다.
아래 프로그램은 mkstemp
를 사용하여 임시 파일을 생성합니다. mkstemp
함수는 두 개의 인수를 사용합니다. 첫 번째는 파일의 식별자이고 두 번째는 파일 이름입니다.
try
블록 내에서 핸들을 통한 with
블록을 사용하여 파일을 엽니다. 그런 다음 일부 데이터가 파일 내부에 기록됩니다.
finally
블록 내에서 파일은 os.unlink(filename)
을 사용하여 암시적으로 삭제됩니다.
import os
import tempfile
handle, filename = tempfile.mkstemp(suffix=".bat")
try:
with os.fdopen(handle, "w") as f:
f.write("signature")
print(handle)
print(filename)
finally:
os.unlink(filename)
출력:
"C:\Users\Win 10\venv\Scripts\python.exe" "C:/Users/Win 10/main.py"
3
C:\Users\WIN10~1\AppData\Local\Temp\tmp1yvy9j_c.bat
Process finished with exit code 0
Python에서 임시 디렉토리 생성
이 클래스는 임시 디렉토리를 안전하게 만듭니다. 이러한 개체는 with
블록과 같은 컨텍스트 관리자를 사용하여 사용할 수 있습니다.
새로 형성된 임시 디렉토리와 그 내용은 컨텍스트 완료 또는 임시 디렉토리 객체 파괴 시 메모리에서 삭제됩니다.
반환된 객체의 name
속성에는 얻을 수 있는 디렉토리 이름이 포함됩니다. 이 이름은 반환된 객체가 컨텍스트 관리자로 사용될 때 with
문(있는 경우)에서 as
절의 대상에 지정됩니다.
예를 들어:
with tempfile.TemporaryDirectory() as f: # 'f' is the 'as' clause in this while statement
print("Temporary directory is created", f)
cleanup()
메소드를 호출하면 디렉토리가 명시적으로 지워집니다. 명시적 또는 암시적 정리 중 처리되지 않은 예외는 정리 오류 무시
가 true인 경우 무시됩니다.
남아 있는 제거 가능한 항목은 최선의 노력을 다해 파괴됩니다.
임시 디렉토리를 만들려면 아래 Python 프로그램을 사용할 수 있습니다.
import tempfile
with tempfile.TemporaryDirectory() as f:
print("Temporary directory is created", f)
출력:
"C:\Users\Win 10\venv\Scripts\python.exe" "C:/Users/Win 10/main.py"
Temporary directory is created C:\Users\WIN10~1\AppData\Local\Temp\tmp1gk3c5z8
Process finished with exit code 0
이 기사에서는 Python의 tempfile
모듈과 그 하위 기능을 사용하여 임시 파일을 만드는 방법을 설명했습니다.