Удалить файлы заданных типов IFF в папке нет файлов других типов

Я хочу удалить определенные файлы типа [cue, jpg, png, m3u и т. д.], но только в том случае, если они находятся в папке сами по себе или другие файлы типа [cue, jpg, png, m3u и т. д.]. У меня уже есть функция, которая может получить все файлы типа [cue,jpg,png,m3u и т. д.] в любой заданной папке и вернуть их в виде списка, но мне просто нужно удалить все это в соответствии с условиями над. Например: Файл q.jpg находится в отдельной папке. После завершения myfunc() она удаляется.

EDIT Извините за неясность. Позвольте мне привести лучший пример: у нас есть две папки, Alpha и Beta в папке Gamma. В Alpha есть три файла: 1.mp3, 2.mp3, folder.jpg. В бета-версии есть один файл cover.jpg. После завершения myfunc() файлы 1.mp3, 2.mp3, folder.jpg следует оставить нетронутыми, а cover.jpg следует удалить.


person wkoomson    schedule 09.10.2011    source источник
comment
Это довольно расплывчатое название!   -  person Loïc Faure-Lacroix    schedule 09.10.2011
comment
Можете ли вы привести какой-либо пример того, что вы хотите удалить, и что вы не хотите удалять... насколько я могу судить, все файлы находятся в папке, поэтому ваша функция должна просто удалять все файлы без исключений.   -  person Loïc Faure-Lacroix    schedule 09.10.2011
comment
Хорошо, @LoïcFaure-Lacroix, я добавил больше деталей   -  person wkoomson    schedule 09.10.2011


Ответы (1)


Похоже, у вас есть два шага:

1) Учитывая список расширений, получите список всех файлов в папке, соответствующих этому расширению.

2) Если все файлы в вашем каталоге имеют расширение, соответствующее вашему списку, удалите их

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

import os       

dir = "myDirectory" 
extList = ['ext1', 'ext2', 'ext3']
allfiles = os.listdir(dir) # all files in that directory

myfiles = [] # will be appended to to only contain files with extensiosn matching extlist
for file in allfiles:
    parts = file.split('.') # split the filename based on .
    if parts[-1] in extensionlist:
        myfiles.append(file) 

if len(myfiles) == len(allfiles):
    for file in myfiles:
        path = "%s/%s" % (dir, file)
        os.remove(path)
        os.remove(file)
person user670416    schedule 09.10.2011
comment
Подожди, я не понимаю. Я могу получить список всех файлов, но как проверить эти условия? Это та часть, в которой я запутался. - person wkoomson; 09.10.2011
comment
Я неправильно понял ваш первоначальный вопрос. Мой отредактированный ответ касается той части, которая вас смутила? (Обратите внимание, что если вы хотите, чтобы он работал для всех каталогов с каталогом, вам придется обернуть все это в другой цикл for) - person user670416; 09.10.2011