потому что Вы, которых несколько присваивают lists_to_filter
в цикле, таким образом, он только возвратит последний результат. это не, включают 'something'
, последний элемент в ['exclude', 'something']
, можно использовать all
для достижения цели:
lists_to_filter = [labels_list for labels_list in lists_to_filter if all(exclude_label not in labels_list for exclude_label in ['exclude', 'something'])]
или расширяются all
логика:
result = []
for labels_list in lists_to_filter:
exclude = False
for exclude_label in ['exclude', 'something']:
if exclude_label in labels_list:
exclude = True
if not exclude:
result.append(labels_list)
print(result)
или можно использовать filter
согласно заголовку:
lists_to_filter = list(filter(lambda x: all(exclude_label not in x for exclude_label in exclude_labels), lists_to_filter))
вывод:
[['b']]
Hope, которая помогает Вам и комментирует, есть ли у Вас дальнейшие вопросы.:)
API-интерфейс FSEvents идеально подходит, если вы просто хотите наблюдать за каталогами, но не обрабатывает мониторинг отдельных файлов. У Стю Коннолли есть отличная оболочка Objective-C для API FSEvents C, она называется SCEvents, и вы можете получить ее здесь:
http://stuconnolly.com/blog/scevents-011/
Хорошая вещь о FSEvents заключается в том, что вам просто нужно следить за одной папкой, и вы будете уведомлены о любых изменениях, которые происходят в любом месте иерархии подпапок этой папки.
Если вам нужны уведомления на уровне файлов, вам нужно будет использовать kqueues. У Ули Кустерера есть отличная оболочка для Objective-C:
http://zathras.de/angelweb/sourcecode.htm#UKKQueue
Любой из этих методов намного проще, чем напрямую бороться с API C, которые не являются особенно хорошо задокументирован и немного тупой.
Не уверен, что лучше всего, но способ - запустить NSThread, который будет регулярно (например, каждую секунду) проверять даты создания файлов в каталог, а затем иметь делегата, связанного с этим потоком, чтобы выполнить какое-либо действие при добавлении нового файла
Если вы меняете файл или папку, я полагаю, что поисковая система Spotlight обновит свою базу данных, чтобы отразить ваши изменения.
Таким образом, вы можете настроить поток, который прослушивает уведомления kMDQueryDidUpdateNotification с помощью запроса Spotlight , относящегося к этому файлу или папке.
Когда вы получаете эти уведомления, вы можете активировать селектор, который сделает то, что вам нужно.
Попробуйте использовать FSEvents , хотя это C API
OS 10.5 или новее
Если вам действительно нужно использовать kqueue (как обсуждалось в других ответах), Google Toolbox для Mac имеет красивую оболочку Objective-C , которую я до сих пор использовал без проблем.