2015-06-11 3 views
1

Каков наилучший способ удалить временный файл? Есть ли встроенный метод для этого? Например:Как удалить tempfile в python

self.tempdir = tempfile.mkdtemp() 
rm self.tempdir ? 
+0

@BhargavRao: Из [документов] (https://docs.python.org/3/library/tempfile.html#tempfile.mkdtemp): «Пользователь' mkdtemp() 'отвечает за удаление временного каталог и его содержимое, когда это будет сделано ». – abarnert

ответ

4

Удаление временного каталога такое же, как удаление любой другой каталог: просто позвонить os.rmdir, если вы уверены, что вы уже опустели его (и считать это ошибкой, если он не пустой), или shutil.rmtree если нет.

Если вы используете 3.2 или новее, гораздо проще создать временный каталог с TemporaryDirectory вместо mkdtemp. Это позаботится обо всех случаях с крайними краями, с кросс-платформенным способом, поэтому вам не о чем беспокоиться. (Если вы создавали временный файл, как подсказывает ваш вопрос название, это еще стоит использовать API для более высокого уровня, как TemporaryFile или NamedTemporaryFile). Например:

with tempfile.TemporaryDirectory() as tempdir: 
    do_stuff_with(tempdir) 
    # deletes everything automatically at end of with 

Или, если вы не можете поместите его в with заявление:

def make_tempdir(self): 
    self.tempdir = tempfile.TemporaryDirectory() 
def remove_tempdir(self): 
    self.tempdir.cleanup() 

в самом деле, даже для 2.7 или 3.1, вы можете рассмотреть вопрос о заимствовании the source to 3.5's TemporaryDirectory класс и использовать его самостоятельно (или ищет портировать на PyPI, если таковой существует).

+1

хотя я проголосовал, если вы используете python 2.7 НЕ рассматривайте возможность заимствования источника до 3,5! Он использует класс finalize, который не реализован в python 2.-.- @abarnert, пожалуйста, обновите свой ответ. –

+0

@eladsilver: финализатор не нужен, если вы всегда используете 'TemporaryDirectory' с' with'-statement. – jfs

+0

@JFSebastian TRY IT, я использовал его в инструкции с помощью и заимствовал функцию из исходного кода и копал в нее из-за ошибок, которые я получил, она использует функции, доступные только в python 3 –

Смежные вопросы