Удалить каждый файл x в каталоге - Python - PullRequest
0 голосов
/ 06 июня 2018

есть ли способ удалить все файлы в каталоге, но сохранить только каждые x файлов?

У меня есть каталог, содержащий изображения, для сцены, снятой с частотой 10 кадров в секунду.Я хочу сохранить каждый 5-й кадр.Пример: если папка содержит изображения от 0 до 10, я хочу сохранить 5-е и 10-е изображения и удалить остальные

1 Ответ

0 голосов
/ 06 июня 2018

Если я предполагаю, что все они находятся в folder и что он содержит только эти изображения (и ничего больше), то это должно работать в одной сложной строке:

import os
[os.remove(os.path.join(folder, img)) for i, img in enumerate(sorted(os.listdir(folder))) if i % 5 != 0]

Это должно работать независимо от того,как они названы и будут сохранять только каждый 5-й файл (при необходимости измените номер 5).Однако будьте очень осторожны , чтобы указать правильную папку и убедиться, что она не содержит ничего, что вы не хотите удалять.Если это так, сначала отфильтруйте список перед удалением.

Если вас не устраивают списки или код, который так нечитабелен (что вроде как), более длинная версия выше:

import os
image_list = sorted(os.listdir(folder))
for i, img in enumerate(image_list):
    if i % 5 != 0:
        img_path = os.path.join(folder,img)
        os.remove(img_path)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...