Как удалить все файлы в папке, кроме 5 последних элементов с Python - PullRequest
0 голосов
/ 27 марта 2020

Я ищу способ очистки папки от файлов, кроме последних пяти последних элементов с Python.

Я совсем новичок в Pytohn, поэтому я смог сохранить последний только с помощью функции max (), но я не могу узнать, как сохранить 5 последних файлов.

У кого-нибудь есть подобная проблема?

Спасибо за любую идею.

Ответы [ 3 ]

1 голос
/ 27 марта 2020

Пользователь os.listdir для получения имени файла. Поскольку это возвращает итератор, вы можете легко сортировать, как вы хотите, в самой python затем используйте индексирование списка, чтобы сохранить последние пять.

, затем используйте os.remove, чтобы удалить файлы

import os
for filename in sorted(os.listdir("foldername"))[:-5]:
    filename_relPath = os.path.join("foldername",filename)
    os.remove(filename_relPath)
1 голос
/ 27 марта 2020

На Python уровне стандартной библиотеки os.scandir извлекает как имя файла, так и его атрибуты. После этого можно легко отсортировать файлы по времени их изменения:

filenames = [entry.name for entry in sorted(os.scandir(path),
                                            key=lambda x: x.stat().st_mtime, reverse=True)]

Возвращает список всех имен файлов в папке path, отсортированный от самого нового до самого старого. Затем вы можете выполнить итерацию на filenames[5:], чтобы удалить все файлы, кроме 5 самых новых.

1 голос
/ 27 марта 2020

вы можете попробовать это, если вы на linux:

import os

directory = /path/to/directory

os.system("cd " + directory + " ls -t1 | tail -n +5 | xargs rm -r")

вы можете попробовать это, если вы на windows:

import os

directory = /path/to/directory

os.system('for /r "skip=5 delims=" %%a in ("dir ' + directory + ' ") do echo del /f "%%a"')

или просто запустить это на cmd:

for /r "skip=5 delims=" %%a in ('dir /path/to/folder') do echo del /f "%%a"
...