2015-02-19 1 views
1

Мне бы хотелось удалить содержимое каталога Windows, содержащего файлы и подкаталоги, содержащие больше файлов. Однако у меня нет одного конкретного файла, который я не хочу удалять (это один и тот же файл каждый раз). Я использую shutil.rmtree, чтобы удалить содержимое папки, но я удаляю файл, который я хочу сохранить. Как я могу сделать исключение, препятствующее удалению файла, который я хотел бы сохранить, и является shutil лучшим методом для этого?Удаление содержимого папки с помощью python

+0

Как обстоит дело; скопируйте файл в безопасное место, протрите каталог, восстановите файл из безопасного места. Шаг 2 должен быть обусловлен успехом этапа 1. – MrGumble

ответ

2

Чтобы получить список имен путей в каталоге, используйте glob:

Say вы хотите найти только .gif файлы и удалить те:

import glob 
gif_list = glob.glob('your/path/name/'+'*.gif') 

для вашего пути, это находит все файлы, которые заканчиваются в .gif. Вы можете удалить их, скопировать, сделать все, что захотите.

Или использовать список понимание:

import glob 
#just get a list of all the files/folders in your path: 
path_list = glob.glob('your/path/name/'+'*') 
gif_list = [x for x in file_list if x[-4:] == '.gif'] 

Glob также найти все папки, конечно. Вы можете отфильтровать файлы и/или папки, которые хотите сохранить, и удалить остальные с помощью rmtree. Например, скажем, вы хотите сохранить файл с именем keep.me:

import glob 
path_list = glob.glob('your/path/name/'+'*') 
del_list = [x for x in path_list if x != 'your/path/name/'+'keep.me'] 

Что-то, как это должно работать. Попробуйте!

+0

это работает, но как я могу использовать 'rmtree' в списке вместо каталога? – risail

+0

Поскольку 'rmtree' принимает путь в качестве аргумента, вы перебираете файлы/каталоги в своем списке и удаляете их один за другим. – Wapiti

+0

Если вы хотите только называть 'rmtree', как только вы можете загрузить файл' keep.me' перед удалением, а затем скопируйте его после удаления. Вероятно, этот метод не будет масштабироваться. – Wapiti

0

rmtree, как представляется, не имеет какого-либо механизма фильтрации, который вы могли бы использовать; далее, поскольку часть его функций заключается в удалении самого каталога, а не только его содержимого, это не имеет смысла.

Если вы могли бы что-то сделать с файлом, чтобы попытка удаления его rmtree не удалась, вы можете игнорировать такие ошибки rmtree, оставляя при этом свой файл, но удаляя остальные. Если вы не можете, вы можете обратиться к os.walk, чтобы перебрать содержимое вашего каталога и, таким образом, решить, какие элементы нужно удалить для себя.

+0

Что значит «что-то делать». Я не могу использовать предложение @ david182, потому что разрешение сети потребовало бы, чтобы я обращался к ИТ каждый раз, когда мне нужно было отредактировать файл. – risail

+0

Вот почему во втором абзаце есть более одного предложения. –

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

  • Нет связанных вопросов^_^