Мне бы хотелось удалить содержимое каталога Windows, содержащего файлы и подкаталоги, содержащие больше файлов. Однако у меня нет одного конкретного файла, который я не хочу удалять (это один и тот же файл каждый раз). Я использую shutil.rmtree
, чтобы удалить содержимое папки, но я удаляю файл, который я хочу сохранить. Как я могу сделать исключение, препятствующее удалению файла, который я хотел бы сохранить, и является shutil
лучшим методом для этого?Удаление содержимого папки с помощью python
ответ
Чтобы получить список имен путей в каталоге, используйте 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']
Что-то, как это должно работать. Попробуйте!
это работает, но как я могу использовать 'rmtree' в списке вместо каталога? – risail
Поскольку 'rmtree' принимает путь в качестве аргумента, вы перебираете файлы/каталоги в своем списке и удаляете их один за другим. – Wapiti
Если вы хотите только называть 'rmtree', как только вы можете загрузить файл' keep.me' перед удалением, а затем скопируйте его после удаления. Вероятно, этот метод не будет масштабироваться. – Wapiti
rmtree
, как представляется, не имеет какого-либо механизма фильтрации, который вы могли бы использовать; далее, поскольку часть его функций заключается в удалении самого каталога, а не только его содержимого, это не имеет смысла.
Если вы могли бы что-то сделать с файлом, чтобы попытка удаления его rmtree
не удалась, вы можете игнорировать такие ошибки rmtree
, оставляя при этом свой файл, но удаляя остальные. Если вы не можете, вы можете обратиться к os.walk
, чтобы перебрать содержимое вашего каталога и, таким образом, решить, какие элементы нужно удалить для себя.
Что значит «что-то делать». Я не могу использовать предложение @ david182, потому что разрешение сети потребовало бы, чтобы я обращался к ИТ каждый раз, когда мне нужно было отредактировать файл. – risail
Вот почему во втором абзаце есть более одного предложения. –
Это всего лишь один файл или тонна файлов? Becouse, если его только этот один файл, который вы можете просто щелкните правой кнопкой мыши - свойства - sercurity и проверить «отрицать» везде
http://www.technorms.com/27407/prevent-files-from-being-deleted-windows
Как обстоит дело; скопируйте файл в безопасное место, протрите каталог, восстановите файл из безопасного места. Шаг 2 должен быть обусловлен успехом этапа 1. – MrGumble