Scripturi Python pentru a șterge regulamentul fișierelor

Curățarea manuală a sistemelor de fișiere nu este bună. Automatizează-le!


Ștergerea manuală a fișierelor și a dosarelor nu este o sarcină interesantă, așa cum se poate crede. Are sens să le automatizăm.

Aici vine Python pentru a ne face viața mai ușoară. Python este un limbaj de programare excelent pentru scripturi. Vom profita de Python pentru a ne finaliza sarcina fără niciun obstacol. În primul rând, ar trebui să știți de ce Python este o alegere bună.

  • Python este un limbaj preferat de toate timpurile pentru automatizarea sarcinilor
  • Mai puțin cod în comparație cu alte limbaje de programare
  • Python este compatibil cu toate sistemele de operare. Puteți rula același cod în Windows, Linux și Mac.
  • Python are un modul numit os, care ne ajută să interacționăm cu sistemul de operare. Vom folosi acest modul pentru a completa automatizarea noastră de ștergere a fișierelor.

Putem înlocui orice sarcini de sistem enervante sau repetitive folosind Python. Scrierea de scripturi pentru finalizarea unei anumite sarcini de sistem este un cupcake dacă știți Python. Să ne uităm la următorul caz de utilizare.

Notă: următoarele sunt testate pe Python 3.6+

Eliminarea fișierelor / dosarelor mai vechi de X zile

Adesea nu aveți nevoie de jurnalele vechi și trebuie să le curățați în mod regulat pentru a face stocarea disponibilă. Ar putea fi orice și nu doar jurnalele.

Avem o metodă numită stat în modulul OS care oferă detalii despre ultimul acces (St_atime), modificare (St_mtime), și modificarea metadatelor (St_ctime) timp. Toate metodele returnează timpul în câteva secunde de la epocă. Puteți găsi mai multe detalii despre epocă aici.

Vom folosi o metodă numită os.walk (calea) pentru parcurgerea subfolderelor unui folder.

Urmați pașii de mai jos pentru a scrie codul pentru fișierele / dosarele de ștergere în funcție de numărul de zile.

  • Importați modulele timp, os, shutil
  • Setați calea și zilele la variabile
  • Convertiți numărul de zile în secunde folosind time.time () metodă
  • Verificați dacă calea există sau nu folosind os.path.exists (cale) modul
  • Dacă calea există, atunci obțineți lista de fișiere și foldere prezente pe traseu, inclusiv subfoldere. Utilizați metoda os.walk (cale), și va returna un generator care conține foldere, fișiere și subfoldere
  • Obțineți calea fișierului sau a folderului prin alăturarea atât a căii curente, cât și a fișierului / a folderului folosind metoda os.path.join ()
  • Obține ctime de la os.stat (cale) metoda folosind atributul st_ctime
  • Comparați ctime cu timpul pe care l-am calculat anterior
  • Dacă rezultatul este mai mare decât zilele dorite ale utilizatorului, verificați dacă este un fișier sau folder. Dacă este un fișier, utilizați os.remove (cale) altfel folosiți shutil.rmtree () metodă
  • Dacă calea nu există, imprimați mesajul care nu a fost găsit

Să vedem codul în detaliu.

# importarea modulelor necesare
import os
import shutil
timp de import

# functie principala
def principal ():

# inițializarea numărării
delete_folders_count = 0
delete_files_count = 0

# specificați calea
calea = "/ PATH_TO_DELETE"

# specificați zilele
zile = 30

# conversia zilei în secunde
# time.time () returnează timpul curent în câteva secunde
secunde = time.time () – (zile * 24 * 60 * 60)

# verificarea dacă fișierul este prezent pe calea sau nu
dacă os.path.exists (calea):

# iterarea pe fiecare folder și fișier din calea
pentru root_folder, foldere, fișiere în os.walk (calea):

# compararea zilelor
dacă secunde >= get_file_or_folder_age (root_folder):

# eliminarea folderului
remove_folder (root_folder)
delete_folders_count + = 1 # counting incrementing

# rupere după îndepărtarea folderului root_
pauză

altceva:

# verificarea folderului din folderul root_
pentru folder în foldere:

# calea folderului
folder_path = os.path.join (root_folder, folder)

# comparativ cu zilele
dacă secunde >= get_file_or_folder_age (folder_path):

# invocarea funcției remove_folder
remove_folder (FOLDER_PATH)
delete_folders_count + = 1 # counting incrementing

# verificarea fișierelor din directorul curent
pentru fișier în fișiere:

# calea fișierului
file_path = os.path.join (root_folder, file)

# compararea zilelor
dacă secunde >= get_file_or_folder_age (file_path):

# invocând funcția remove_file
remove_file (file_path)
delete_files_count + = 1 # counting incrementing

altceva:

# dacă calea nu este un director
# comparativ cu zilele
dacă secunde >= get_file_or_folder_age (calea):

# invocarea fișierului
remove_file (cale)
delete_files_count + = 1 # counting incrementing

altceva:

# file / folder nu este găsit
imprima (f“"{cale}" nu este găsit’)
delete_files_count + = 1 # counting incrementing

imprimare (f"Total foldere șterse: {delete_folders_count}")
imprimare (f"Total fișiere șterse: {eliminate_files_count}")

def remove_folder (calea):

# eliminarea folderului
dacă nu shutil.rmtree (calea):

# mesaj de succes
imprimare (f"{calea} este eliminată cu succes")

altceva:

# mesaj de eșec
imprimare (f"Nu se poate șterge {calea}")

def remove_file (calea):

# eliminarea fișierului
dacă nu os.remove (calea):

# mesaj de succes
imprimare (f"{calea} este eliminată cu succes")

altceva:

# mesaj de eșec
imprimare (f"Nu se poate șterge {calea}")

def get_file_or_folder_age (calea):

# obtinerea ctime a fisierului / folderului
# timpul va fi în câteva secunde
ctime = os.stat (calea) .st_ctime

# întoarcerea timpului
întoarce timpul

dacă __name__ == ‘__main__’:
principal()

Trebuie să ajustați următoarele două variabile din codul de mai sus, pe baza cerinței.

zile = 30
calea = "/ PATH_TO_DELETE"

Eliminarea fișierelor mai mari de X GB

Să căutăm fișierele mai mari decât o anumită dimensiune și să le ștergem. Este similar cu scriptul de mai sus. În scriptul anterior, am luat vârstă ca parametru, și acum vom lua mărimea ca parametru pentru ștergere.

# importarea modulului os
import os

# funcție care returnează dimensiunea unui fișier
def get_file_size (calea):

# obținerea dimensiunii fișierului în octeți
size = os.path.getsize (calea)

# returnarea dimensiunii fișierului
mărimea returnării

# funcție pentru a șterge un fișier
def remove_file (calea):

# ștergerea fișierului
dacă nu os.remove (calea):

# succes
imprimare (f"{calea} se șterge cu succes")

altceva:

# eroare
imprimare (f"Nu se poate șterge {calea}")

def principal ():
# specificați calea
calea = "ENTER_PATH_HERE"

# pune dimensiunea maximă a fișierului în MB
dimensiune = 500

# verificarea dacă calea există sau nu
dacă os.path.exists (calea):

# convertirea dimensiunii în octeți
mărime = mărime * 1024 * 1024

# traversarea prin subfoldere
pentru root_folder, foldere, fișiere în os.walk (calea):

# iterarea peste lista de fișiere
pentru fișier în fișiere:

# obținerea căii de fișiere
file_path = os.path.join (root_folder, file)

# verificarea dimensiunii fișierului
dacă get_file_size (file_path) >= dimensiune:
# invocând funcția remove_file
remove_file (file_path)

altceva:

# verificând numai dacă calea este fișier
dacă os.path.isfile (calea):
# calea nu este un dir
# verificarea fișierului direct
dacă get_file_size (calea) >= dimensiune:
# invocând funcția remove_file
remove_file (cale)

altceva:

# calea nu există
imprimare (f"{calea} nu există")

dacă __name__ == ‘__main__’:
principal()

Reglați următoarele două variabile.

calea = "ENTER_PATH_HERE"
dimensiune = 500

Eliminarea fișierelor cu o extensie specifică

Este posibil să existe un scenariu în care doriți să ștergeți fișierele în funcție de tipurile lor de extensie. Să spunem fișierul .log Putem găsi extensia unui fișier folosind metoda os.path.splitext (path). Întoarce un tuple care conține calea și extensia fișierului.

# importarea modulului os
import os

# functie principala
def principal ():

# specificați calea
calea = "PATH_TO_LOOK_FOR"

# specificați extensia
extensie = ".Buturuga"

# verificarea dacă calea există sau nu
dacă os.path.exists (calea):

# verificați dacă calea este director sau nu
dacă os.path.isdir (calea):

# iterarea prin subfoldere
pentru root_folder, foldere, fișiere în os.walk (calea):

# verificarea fișierelor
pentru fișier în fișiere:

# calea fișierului
file_path = os.path.join (root_folder, file)

# extragerea extensiei din numele fișierului
file_extension = os.path.splitext (file_path) [1]

# verificarea fișierului_extensie
if extension == file_extension:

# ștergerea fișierului
dacă nu, os.remove (file_path):

# mesaj de succes
imprimare (f"{file_path} șters cu succes")

altceva:

# mesaj de eșec
imprimare (f"Nu se poate șterge {file_path}")

altceva:

# calea nu este un director
imprimare (f"{path} nu este un director")

altceva:

# calea nu există
imprimare (f"{calea} nu există")

dacă __name__ == ‘__main__’:
# invocarea funcției principale
principal()

Nu uitați să actualizați variabila de cale și de extensie din codul de mai sus pentru a satisface cerințele dvs..

Aș sugera testarea scripturilor în mediul NON PRODUCȚIE. După ce sunteți mulțumit de rezultate, puteți programa prin cron (dacă folosiți Linux) să-l executați periodic pentru lucrări de întreținere. Python este excelent pentru a realiza aceste lucruri și, dacă este interesat să învețe să facă mai mult, verificați acest lucru Curs Udemy.

ETICHETE:

  • Piton

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