Python, удаление 2000 самых старых файлов, если папка Windows10 содержит более 10000 файлов - PullRequest
0 голосов
/ 08 февраля 2020

Я знаю, что в NTFS может быть 4 294 967 295 файлов в одной папке, и это много, однако я бы каким-то образом контролировал это количество файлов в папке (в моей ситуации d: / screen / work /) где сохраняются 60 изображений в минуту. Как я могу сделать это, используя Python? Мне удалось найти решение (ниже) только для удаления более старых файлов (старше 7 дней в приведенном ниже коде), но я не представлял, как удалить последние «n» самых старых файлов (например, 2000), если папка содержит более «y» файлов (например, 10000).

from pathlib import Path
import arrow
import os
import sys
    filesPath = r"d:/screen/work/"
    criticalTime = arrow.now().shift(hours=+5).shift(days=-7)
    for item in Path(filesPath).glob('*'):
        if item.is_file():
            itemTime = arrow.get(item.stat().st_mtime)
            if itemTime < criticalTime:
                os.remove(str(item.absolute()))
                print(str(item.absolute()))
                pass

1 Ответ

1 голос
/ 08 февраля 2020

Простым решением для этого будет простое создание нового dict и добавление ваших item.absolute() и itemTime.timestamp в качестве пар ключ-значение

x[str(item.absolute())] = itemTime.timestamp

Затем сортировка по значениям,

items_sorted = {k: v for k, v in sorted(x.items(), key=lambda item: item[1])}

и повторение первых len(dict)-n значений

from pathlib import Path
from itertools import islice
import arrow
import os
import sys

x = {}
n = 10

filesPath = r"d:/screen/work/"
criticalTime = arrow.now().shift(hours=+5).shift(days=-7)
for item in Path(filesPath).glob('*'):
    if item.is_file():
        itemTime = arrow.get(item.stat().st_mtime)
        if itemTime < criticalTime:
            x[str(item.absolute())] = itemTime.timestamp


items_sorted = {k: v for k, v in sorted(x.items(), key=lambda item: item[1])}

for path, itemTime in islice(items_sorted.items(), len(x)-n):
    os.remove(str(item.absolute()))
    print(path)

Кроме того, это решение не будет хорошо масштабироваться на очень большом количестве файлов. Сортировка всего текста может быть трудоемкой и неэффективной, но лучший подход был бы гораздо более сложным

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