Python Skripts за изтриване на файловете Редовно

Почистването на файловата система редовно ръчно не е добре. Автоматизирайте ги!


Изтриването на файлове и папки ръчно не е вълнуваща задача, както може да се мисли. Има смисъл да ги автоматизирате.

Тук идва Python, за да улесни живота ни. Python е отличен език за програмиране за скриптове. Ще се възползваме от Python, за да завършим задачата си без пречка. Първо, трябва да знаете защо Python е добър избор.

  • Python е любим език за всички времена за автоматизиране на задачи
  • По-малко код в сравнение с други програмни езици
  • Python е съвместим с всички операционни системи. Можете да стартирате един и същ код в Windows, Linux и Mac.
  • Python има модул, наречен os, който ни помага да взаимодействаме с операционната система. Ще използваме този модул, за да завършим нашата автоматизация на изтриването на файловете.

Можем да заменим всички досадни или повтарящи се системни задачи с помощта на Python. Писането на скриптове за изпълнение на конкретна системна задача е кекс, ако знаете Python. Нека разгледаме следния случай на употреба.

Забележка: Следното се тества на Python 3.6+

Премахване на файлове / папки, по-стари от X дни

Често не се нуждаете от стари дневници и редовно трябва да ги почиствате, за да осигурите място за съхранение. Може да бъде всичко, а не само трупи.

В os модула имаме метод, наречен stat, който дава подробности за последния достъп (St_atime), модификация (St_mtime), и промяна на метаданни (St_ctime) време. Всички методи връщат време за секунди от епохата. Можете да намерите повече подробности за епохата тук.

Ще използваме метод, наречен os.walk (път) за преминаване през подпапките на папка.

Следвайте стъпките по-долу, за да напишете код за файловете / папките за изтриване въз основа на броя дни.

  • Импортирайте модулите време, ос, шутил
  • Задайте пътя и дните към променливите
  • Преобразувайте броя дни в секунди с помощта time.time () метод
  • Проверете дали пътеката съществува или не използвате os.path.exists (път) модул
  • Ако пътят съществува, тогава вземете списъка с файлове и папки, присъстващи в пътя, включително подпапки. Използвайте метода os.walk (път), и ще върне генератор, съдържащ папки, файлове и подпапки
  • Получете пътя на файла или папката, като се присъедините както към текущия път, така и към името на файла / папката, като използвате метода os.path.join ()
  • Вземи Престъпление от os.stat (път) метод с помощта на атрибута st_ctime
  • Сравнете Престъпление с времето, което сме изчислили по-рано
  • Ако резултатът е по-голям от желаните дни на потребителя, тогава проверете дали е файл или папка. Ако е файл, използвайте os.remove (път) друго използвайте shutil.rmtree () метод
  • Ако пътят не съществува, отпечатайте съобщението не е намерено

Нека видим подробно кода.

# импортиране на необходимите модули
import os
внос shutil
време за внос

# Главна функция
def main ():

# инициализиране на броя
delete_folders_count = 0
delete_files_count = 0

# укажете пътя
път = "/ PATH_TO_DELETE"

# посочете дните
дни = 30

# преобразуване на дни в секунди
# time.time () връща текущото време в секунди
секунди = time.time () – (дни * 24 * 60 * 60)

# проверка дали файлът присъства в пътя или не
ако os.path.exists (път):

# итерация над всяка папка и файл в пътя
за root_folder, папки, файлове в os.walk (път):

# сравняване на дните
ако секунди >= get_file_or_folder_age (root_folder):

# премахване на папката
remove_folder (root_folder)
delete_folders_count + = 1 # увеличение на броя

# счупване след премахване на root_folder
почивка

друго:

# проверка на папка от root_folder
за папка в папки:

# път на папката
folder_path = os.path.join (root_folder, папка)

# сравняване с дните
ако секунди >= get_file_or_folder_age (folder_path):

# извикване на функцията за премахване на папка
remove_folder (FOLDER_PATH)
delete_folders_count + = 1 # увеличение на броя

# проверка на текущите файлове на директория
за файл във файлове:

# файлова пътека
file_path = os.path.join (root_folder, файл)

# сравняване на дните
ако секунди >= get_file_or_folder_age (file_path):

# извикване на функцията Remove_file
remove_file (FILE_PATH)
delete_files_count + = 1 # увеличение на броя

друго:

# ако пътят не е директория
# сравняване с дните
ако секунди >= get_file_or_folder_age (път):

# извикване на файла
remove_file (път)
delete_files_count + = 1 # увеличение на броя

друго:

# файл / папка не е намерен
отпечатате (е ‘"{Път}" не е намерен ‘)
delete_files_count + = 1 # увеличение на броя

печат (е"Общо изтрити папки: {delete_folders_count}")
печат (е"Общо изтрити файлове: {delete_files_count}")

def Remove_folder (път):

# премахване на папката
ако не shutil.rmtree (път):

# съобщение за успех
печат (е"{path} се премахва успешно")

друго:

# съобщение за грешка
печат (е"{Path} не може да се изтрие")

def remove_file (път):

# премахване на файла
ако не е os.remove (път):

# съобщение за успех
печат (е"{path} се премахва успешно")

друго:

# съобщение за грешка
печат (е"{Path} не може да се изтрие")

def get_file_or_folder_age (път):

# получаване на време на файла / папката
# времето ще бъде за секунди
ctime = os.stat (път) .st_ctime

# връщане на времето
върнете ctime

ако __name__ == ‘__main__’:
Основната ()

Трябва да коригирате следните две променливи в горния код въз основа на изискването.

дни = 30
път = "/ PATH_TO_DELETE"

Премахване на файлове, по-големи от X GB

Нека търсим файловете, които са по-големи от определен размер и да ги изтрием. Подобно е на горния скрипт. В предишния сценарий сме взели възраст като параметър и сега ще вземем размер като параметър за изтриването.

# импортиране на os модула
import os

# функция, която връща размер на файл
def get_file_size (път):

# получаване на размер на файла в байтове
size = os.path.getsize (път)

# връщане на размера на файла
размер на връщане

# функция за изтриване на файл
def remove_file (път):

# изтриване на файла
ако не е os.remove (път):

# успех
печат (е"{path} се изтрива успешно")

друго:

# грешка
печат (е"{Path} не може да се изтрие")

def main ():
# укажете пътя
път = "ENTER_PATH_HERE"

# поставете максимален размер на файла в MB
размер = 500

# проверка дали пътеката съществува или не
ако os.path.exists (път):

# преобразуване на размер в байтове
размер = размер * 1024 * 1024

# преминаване през подпапките
за root_folder, папки, файлове в os.walk (път):

# итерация над списъка с файлове
за файл във файлове:

# получаване на файлов път
file_path = os.path.join (root_folder, файл)

# проверка на размера на файла
if get_file_size (file_path) >= размер:
# извикване на функцията Remove_file
remove_file (FILE_PATH)

друго:

# проверка само ако пътят е файл
ако os.path.isfile (път):
# път не е реж
# директно проверяване на файла
ако get_file_size (път) >= размер:
# извикване на функцията Remove_file
remove_file (път)

друго:

# път не съществува
печат (е"{path} не съществува")

ако __name__ == ‘__main__’:
Основната ()

Коригирайте следните две променливи.

път = "ENTER_PATH_HERE"
размер = 500

Премахване на файлове със специфично разширение

Възможно е да има сценарий, в който искате да изтриете файлове според техните разширения. Да речем .log файл. Можем да намерим разширението на файл, използвайки метода os.path.splitext (path). Той връща кортеж, съдържащ пътя и разширението на файла.

# импортиране на os модул
import os

# Главна функция
def main ():

# укажете пътя
път = "PATH_TO_LOOK_FOR"

# посочете разширението
разширение = ".дневник"

# проверка дали пътеката съществува или не
ако os.path.exists (път):

# проверете дали пътят е директория или не
ако os.path.isdir (път):

# итерация през подпапките
за root_folder, папки, файлове в os.walk (път):

# проверка на файловете
за файл във файлове:

# файлова пътека
file_path = os.path.join (root_folder, файл)

# извличане на разширението от името на файла
file_extension = os.path.splitext (file_path) [1]

# проверка на разширението на файла
ако разширение == file_extension:

# изтриване на файла
ако не е os.remove (file_path):

# съобщение за успех
печат (е"{file_path} е изтрит успешно")

друго:

# съобщение за грешка
печат (е"{File_path} не може да се изтрие")

друго:

# path не е директория
печат (е"{path} не е директория")

друго:

# път не съществува
печат (е"{path} не съществува")

ако __name__ == ‘__main__’:
# извикване на основна функция
Основната ()

Не забравяйте да актуализирате променливата на пътя и разширението в горния код, за да отговаря на вашите изисквания.

Бих предложил да тествате скриптите в NON PRODUCTION среда. След като сте доволни от резултатите, можете да планирате чрез cron (ако използвате Linux), за да го стартирате периодично за дейности по поддръжка. Python е чудесен за постигането на тези неща и ако се интересувате да научите да правите повече, проверете това Удеми курс.

ЕТИКЕТИ:

  • Питон

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map