2010-01-17 2 views
1

При кодировании в Python, я часто нужно написать функцию, как этот:Запрашивать на файл/каталог удалить

def delete_dir(dir_name): 

    if os.path.exists(dir_name): 
     reply = raw_input("Delete directory "+dir_name+"? [y/[n]] ") 
     if reply=='y': 
      os.system('rm -r '+dir_name) 
     else: 
      print "Aborting..." 
      sys.exit() 

который в основном только команда удалить с пользователем запроса на перепроверить (I также есть один для удаления файлов). Учитывая большое количество модулей Python там, в том числе в стандартной библиотеке, мне интересно, если что-то подобное уже существует?

+1

Вы, вероятно, следует делать, если ответ в [ «у», «Y», «да»]: –

+0

стараются не вызывать системные программы, если это возможно , Его не переносят – ghostdog74

+0

Просто отметим, что в Python 3 raw_input() [переименован] (https://docs.python.org/3/whatsnew/3.0.html#builtins) для ввода(). – Yannis

ответ

1

Чтобы удалить каталог, используйте os module os.rmdir(), os.removedirs(). Или shutil.rmtree(). Ознакомьтесь с документами для получения дополнительной информации.

+0

Я согласен, что они могут заменить строку os.system ('rm -r' + dir_name), но то, что я ищу, - это подпрограмма, которая автоматически даст пользователю запрос дважды проверить, следует ли удалить каталог. – astrofrog

0

ну, вы можете сохранить эту функцию в модуле и повторно использовать ее в других модулях, таким образом, ваша проблема будет решена!

2

Это не будет вещь Python, но если вы продолжаете использовать os.system() для вызова вызова, вы можете передать параметр -i в rm. Страница людей объясняет:

-i       подсказка перед каждым удалением

EDIT: Я только что прочитал ваш код еще раз, и это выглядит как будто вы только побуждая раз перед всем процессом удаления , а не для каждого файла. Вы можете быть заинтересованы в -I флаге вместо:

-I       подскажите один раз перед удалением более трех файлов или когда удаления рекурсивно. Менее навязчивый чем -i, в то же время давая защиту от большинства ошибок