Python удалить файл старше

Python, удаление всех файлов в папке старше X дней

Я пытаюсь написать python script, чтобы удалить все файлы в папке старше X дней. Это то, что у меня есть до сих пор:

import os, time, sys path = r"c:\users\%myusername%\downloads" now = time.time() for f in os.listdir(path): if os.stat(f).st_mtime < now - 7 * 86400: if os.path.isfile(f): os.remove(os.path.join(path, f)) 

Когда я запускаю script, я получаю: Error2 - system cannot find the file specified , и он дает имя файла. Что я делаю неправильно?

7 ответов

os.listdir() возвращает список голой имени файла. У них нет полного пути, поэтому вам нужно объединить его с контуром содержащего каталога. Вы делаете это, когда вы идете, чтобы удалить файл, но не когда вы stat файл (или когда вы делаете isfile() ). Самое простое решение - просто сделать это один раз в верхней части цикла:

Теперь f - это полный путь к файлу, и вы просто используете f всюду (измените ваш вызов remove() , чтобы просто использовать f ).

Нужно ли мне указывать путь, когда я объявляю f или что вы имеете в виду? Я объявил f в начале, как вы рекомендовали, но теперь он хочет, чтобы я объявил путь для os.path. Или я не понимаю, что вы имеете в виду?

Как я уже сказал, в верхней части вашего цикла (т. Е. Сразу после оператора for ) поместите оператор, который я вам дал. Я не могу сказать это проще.

Хорошо, я объявил это не в том месте. Таким образом, он должен выглядеть как f в os.listdir (путь): f = os.path.join (путь, f) Это правильно?

Здравствуйте, здорово видеть, что люди уже подумали о том, что я думаю. Одно маленькое дополнение. Как получить в python количество затронутых папок, чтобы можно было отправлять электронную почту в конце операции? Спасибо

Вам также нужно указать путь, или он будет выглядеть в cwd. что иронически было достаточно, если вы сделали на os.remove , но не где еще.

for f in os.listdir(path): if os.stat(os.path.join(path,f)).st_mtime < now - 7 * 86400: 

Хорошо, я больше не получаю сообщение об ошибке, но теперь кажется, что это займет некоторое время или фактически не удалит мои файлы старше 7 дней. Моя математика неверна или мне нужно как-то устанавливать разрешения?

Читайте также:  Python http post files

Вы также изменили os.isfile ? или это будет иметь значение false . (или просто сделать так, как рекомендовано kindall, и изменить f, чтобы он включал путь . )

Так я должен был объявить f в начале? Уч. Это мой самый первый скрипт на Python, я читаю курс, но учусь лучше.

Я думаю, что новая pathlib вещь вместе с модулем стрелка для дат для более чистого кода.

from pathlib import Path import arrow filesPath = r"C:\scratch\removeThem" criticalTime = arrow.now().shift(hours=+5).shift(days=-7) for item in Path(filesPath).glob('*'): if item.is_file(): print (str(item.absolute())) itemTime = arrow.get(item.stat().st_mtime) if itemTime < criticalTime: #remove it pass 
  • pathlib позволяет легко перечислить содержимое каталога, получить доступ к таким характеристикам файла, как время создания и получить полные пути.
  • стрелка упрощает и упрощает расчеты времени.

Здесь вывод показывает полные пути, предлагаемые pathlib. (Не нужно присоединяться.)

C:\scratch\removeThem\four.txt C:\scratch\removeThem\one.txt C:\scratch\removeThem\three.txt C:\scratch\removeThem\two.txt 

Простой python script для удаления/регистрации/файлов старше 10 дней

#!/usr/bin/python # run by crontab # removes any files in /logs/ older than 10 days import os, sys, time from subprocess import call def get_file_directory(file): return os.path.dirname(os.path.abspath(file)) now = time.time() cutoff = now - (10 * 86400) files = os.listdir(os.path.join(get_file_directory(__file__), "logs")) file_path = os.path.join(get_file_directory(__file__), "logs/") for xfile in files: if os.path.isfile(str(file_path) + xfile): t = os.stat(str(file_path) + xfile) c = t.st_ctime # delete file if older than 10 days if c < cutoff: os.remove(str(file_path) + xfile) 

С помощью __file__ вы можете заменить свой путь.

вау, так что если этот скрипт делает то, что я думаю, то я попробую. по сути, я хотел, чтобы из одного каталога было удалено что-либо старше 14 дней, и ему был назначен подстановочный знак (.mov), а другой каталог снова удалил что-либо старше 10 дней с той же самой подстановочной картой (.mov), что имеет смысл? Огромное спасибо.

Это удаляет файлы старше 60 дней.

import os directory = '/home/coffee/Documents' os.system("find " + directory + " -mtime +60 -print") os.system("find " + directory + " -mtime +60 -delete") 

хотел бы добавить то, что я придумал, чтобы выполнить эту задачу. функция вызывается в процессе входа в систему.

 def remove_files(): removed=0 path = "desired path" # Check current working directory. dir_to_search = os.getcwd() print "Current working directory %s" % dir_to_search #compare current to desired directory if dir_to_search != "full desired path": # Now change the directory os.chdir( desired path ) # Check current working directory. dir_to_search = os.getcwd() print "Directory changed successfully %s" % dir_to_search for dirpath, dirnames, filenames in os.walk(dir_to_search): for file in filenames: curpath = os.path.join(dirpath, file) file_modified = datetime.datetime.fromtimestamp(os.path.getmtime(curpath)) if datetime.datetime.now() - file_modified > datetime.timedelta(hours=1): os.remove(curpath) removed+=1 print(removed) 

Ещё вопросы

  • 1 почему event.target не запускается в следующем коде, пока работает простой обработчик события click?
  • 0 Обработка выражения вне повторения в ng-классе
  • 0 .HTACCESS - Дамп сайт от производства до разработки
  • 0 передача массива в предложении where в соединении
  • 0 C ++ Получение неопределенной ошибки символа
  • 1 Найти тип изображения из потока памяти
  • 1 Линейный график D3 JS начинается с 0
  • 1 Составить 2d массив списка точек
  • 1 Должны ли похожие тестовые случаи jUnit находиться в одном тесте?
  • 1 Проблема задержки в нескольких графиках, SVG или HTML5 Canvas?
  • 0 Android с PHP веб-сервисом
  • 0 Угловая лучшая практика. Действия контроллера, запускающие анимацию
  • 0 Тестирование углового модала открытое обещание
  • 0 Существует ли кроссплатформенная библиотека для событий файловой системы?
  • 0 Что я делаю не так с функцией ввода?
  • 0 Codeigniter возвращает false из моделей
  • 1 Как получить имя схемы для sysobjects при запросе базы данных сервера sql
  • 0 Уравнение строки процесса с именами переменных без знака $
  • 1 ASP.Net MVC длительный процесс
  • 1 Горизонтальное ограничение зрения в ConstraintLayout
  • 1 Ошибка параметров ограниченного типа Java
  • 1 Почему рендеринг textField с поведением занимает так много времени
  • 0 сохранить изменения из таблицы JSP в базу данных
  • 1 Как просмотреть HTML-файл в частичном представлении ASP.NET MVC (не Razor)
  • 1 Попытка перенести старый алгоритм шифрования на C #
  • 0 Вырезать первый символ из элемента абзаца, заменить содержимое и добавить класс. JQuery
  • 0 Laravel Digital Ocean Ошибка в обработчике исключений
  • 1 Невозможно отправить настраиваемое поле, которое расширяет представление данных
  • 0 Используйте поиск с атрибутом данных
  • 1 построить динамический массив для charts.js
  • 1 Остановить запись звука - Java
  • 1 отображение списка возможностей программы
  • 1 Firebase OrderByChild () и EqualTo () не работает должным образом
  • 0 Выбрать все данные из второй таблицы, где имя равно значению столбца из первой таблицы
  • 0 функция slideToggle работает отдельно
  • 0 Скопируйте вывод qDebug ()
  • 1 Наследование Java - моделирование нескольких объектов
  • 1 Получить все документы с помощью GridFSOperations
  • 0 Создать сообщение об успешной отправке формы php
  • 1 Bluetooth получает данные от HC05 не работает. Я получаю эти данные мусора ����
  • 1 Цикл проектов в решении в MSBuild
  • 0 Синтаксическая ошибка MySQLi / PHP
  • 1 Как раздеть рисунок в струне?
  • 0 Не могу показать модальное изображение заголовка с Angularjs
  • 1 Как будет работать абстрактный метод рендеринга? (Ява)
  • 0 SFINAE выбор перегрузки для имеет или не имеет оператора
  • 0 выберите для обновления дважды к той же таблице ключом diffrenet, вызывающим взаимоблокировку в MySQL
  • 1 Как остановить повторяющиеся значения в цикле?
  • 0 Как мне сопоставить динамический маршрут в базе данных?

Источник

Как удалять старые файлы на python

Admin 05.12.2020 Python

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

Функция сбора файлов в папке

def get_files ( path ) :
files = [ ]

directory = os . listdir ( path )
directory. sort ( reverse = True )

for file in directory:
if file . endswith ( '.jpg' ) :
files. append ( file )
return files

Будем считать, что наши файлы были сохранены через timestamp. Пример есть в статье оптимизация скриншотов на python. Это нужно для их правильной сортировки.

Функция удаления старых файлов

Мы будем удалять файлы, если их будет становится больше 30 штук. Старые будут удаляться в первую очередь.

def remove_old_files ( path , files ) :
""" Оставляет последние 30 файлов, остальные удаляет """
max_files = 30
if len ( files ) < max_files:
return
i = 0
for f in files:
i + = 1
if i > max_files:
os . remove ( os . path . join ( path , f ) )

Использование

Читайте также

У сайта нет цели самоокупаться, поэтому на сайте нет рекламы. Но если вам пригодилась информация, можете лайкнуть страницу, оставить комментарий или отправить мне подарок на чашечку кофе.

Источник

Оцените статью