source

임시 디렉토리를 만들고 경로/파일 이름을 가져오려면 어떻게 해야 합니까?

manysource 2022. 11. 4. 23:31

임시 디렉토리를 만들고 경로/파일 이름을 가져오려면 어떻게 해야 합니까?

Python에서 임시 디렉토리를 만들고 경로/파일 이름을 얻으려면 어떻게 해야 합니까?

모듈의 기능을 사용합니다.

import tempfile
import shutil

dirpath = tempfile.mkdtemp()
# ... do stuff with dirpath
shutil.rmtree(dirpath)

Python 3에서는 모듈로부터 를 사용할 수 있습니다.

로부터:

import tempfile

with tempfile.TemporaryDirectory() as tmpdirname:
     print('created temporary directory', tmpdirname)

# directory and contents have been removed

디렉토리가 삭제되는 시기를 수동으로 제어하려면 다음 예시와 같이 컨텍스트 매니저를 사용하지 마십시오.

import tempfile

temp_dir = tempfile.TemporaryDirectory()
print(temp_dir.name)
# use temp_dir, and when done:
temp_dir.cleanup()

또, 메뉴얼에는 다음과 같이 기재되어 있습니다.

컨텍스트가 완료되거나 임시 디렉토리 오브젝트가 파기되면 새로 작성된 임시 디렉토리와 그 모든 내용이 파일시스템에서 삭제됩니다.

예를 들어, 프로그램의 마지막에, Python은 디렉토리가 삭제되지 않은 경우(예: 컨텍스트 매니저 또는 에 의해) 정리됩니다.cleanup()방법.파이썬의unittest에 대해 불평할 수 있다ResourceWarning: Implicitly cleaning up <TemporaryDirectory...하지만 이걸 믿으시면요.

다른 답변에 대해 자세히 설명하자면 예외에서도 tmpdir를 청소할 수 있는 매우 완전한 예를 다음에 제시하겠습니다.

import contextlib
import os
import shutil
import tempfile

@contextlib.contextmanager
def cd(newdir, cleanup=lambda: True):
    prevdir = os.getcwd()
    os.chdir(os.path.expanduser(newdir))
    try:
        yield
    finally:
        os.chdir(prevdir)
        cleanup()

@contextlib.contextmanager
def tempdir():
    dirpath = tempfile.mkdtemp()
    def cleanup():
        shutil.rmtree(dirpath)
    with cd(dirpath, cleanup):
        yield dirpath

def main():
    with tempdir() as dirpath:
        pass # do something here

python 3.2 이후로는 stdlib https://docs.python.org/3/library/tempfile.html#tempfile.TemporaryDirectory에 이를 위한 유용한 컨텍스트 매니저가 있습니다.

제가 당신의 질문을 제대로 이해했다면, 당신은 임시 디렉토리 내에 생성된 파일의 이름도 알고 싶습니까?그렇다면 다음을 시도해 보십시오.

import os
import tempfile

with tempfile.TemporaryDirectory() as tmp_dir:
    # generate some random files in it
     files_in_dir = os.listdir(tmp_dir)

Docs.python.org 컨텍스트 매니저를 사용한Temporary Directory 예시

import tempfile
# create a temporary directory using the context manager
with tempfile.TemporaryDirectory() as tmpdirname:
    print('created temporary directory', tmpdirname)
# directory and contents have been removed

pathlib를 사용하여 tempfile 위에서 경로 조작을 용이하게 하면 pathlib의 /path 연산자를 사용하여 새 경로를 만들 수 있습니다.

import tempfile
from pathlib import Path
with tempfile.TemporaryDirectory() as tmpdirname:
    temp_dir = Path(tmpdirname)
    print(temp_dir, temp_dir.exists())
    file_name = temp_dir / "test.txt"
    file_name.write_text("bla bla bla")
    print(file_name, "contains", file_name.open().read())

# /tmp/tmp81iox6s2 True
# /tmp/tmp81iox6s2/test.txt contains bla bla bla

컨텍스트 관리자 외부에서 파일이 삭제되었습니다.

print(temp_dir, temp_dir.exists())
# /tmp/tmp81iox6s2 False
print(file_name, file_name.exists())
# /tmp/tmp81iox6s2/test.txt False

언급URL : https://stackoverflow.com/questions/3223604/how-to-create-a-temporary-directory-and-get-its-path-file-name