Python Skripti za brisanje datotek

Redno čiščenje datotečnega sistema ni dobro. Avtomatizirajte jih!


Ročno brisanje datotek in map ni zanimiva naloga. Smiselno jih je avtomatizirati.

Tu je Python, ki nam olajša življenje. Python je odličen programski jezik za scenarije. Izkoristili bomo Python, da brez naloge končamo svojo nalogo. Najprej bi morali vedeti, zakaj je Python dobra izbira.

  • Python je ves čas najljubši jezik za avtomatizacijo opravil
  • Manj kode v primerjavi z drugimi programskimi jeziki
  • Python je združljiv z vsemi operacijskimi sistemi. Ista koda lahko zaženete v operacijskem sistemu Windows, Linux in Mac.
  • Python ima modul z imenom os, ki nam pomaga pri interakciji z operacijskim sistemom. Ta modul bomo uporabili za dokončanje naše avtomatizacije brisanja datotek.

S pomočjo Pythona lahko nadomestimo vsa nadležna ali ponavljajoča se sistemska opravila. Pisanje skriptov za dokončanje določene sistemske naloge je piškotek, če poznate Python. Poglejmo naslednji primer uporabe.

Opomba: Na Pythonu 3.6 so preizkušeni naslednji+

Odstranjevanje datotek / map, starejših od X dni

Pogosto ne potrebujete starih dnevnikov in jih morate redno čistiti, da omogočite shranjevanje. Lahko je karkoli in ne le hlodov.

V os modulu imamo metodo, imenovano stat, ki daje podrobnosti o zadnjem dostopu (st_atime), sprememba (st_mtime), in spreminjanje metapodatkov (st_ktime) čas. Vse metode vrnejo čas v sekundah od epohe. Več podrobnosti o epohi tukaj.

Za premikanje po podmapah mape bomo uporabili metodo, imenovano os.walk (pot).

Sledite spodnjim korakom za pisanje kode za izbrisne datoteke / mape glede na število dni.

  • Uvozite module čas, os, shutil
  • Nastavite spremenljivki pot in dneve
  • Pretvorite število dni v sekunde z uporabo time.time () metoda
  • Preverite, ali pot obstaja ali ne uporabljate os.path.exists (pot) modul
  • Če pot obstaja, dobite seznam datotek in map, ki so na poti, vključno s podmapami. Uporabite metodo os.walk (pot), vrnil bo generator, ki vsebuje mape, datoteke in podmape
  • Pridobite pot datoteke ali mape, tako da z metodo uporabite tako, da se pridružite trenutni poti in imenu datoteke / mape os.path.join ()
  • Pridobite ctime Iz os.stat (pot) metoda z uporabo atributa st_ctime
  • Primerjaj ctime s časom, ki smo ga predhodno izračunali
  • Če je rezultat večji od želenih dni uporabnika, preverite, ali gre za datoteko ali mapo. Če gre za datoteko, uporabite os.remove (pot) drugače uporabite shutil.rmtree () metoda
  • Če pot ne obstaja, natisnite sporočilo ni najdeno

Oglejmo si kodo podrobno.

# uvoz potrebnih modulov
import os
uvoz shutil
čas uvoza

# glavna funkcija
def main ():

# inicializiranje štetja
delete_folders_count = 0
delete_files_count = 0

# določite pot
pot = "/ PATH_TO_DELETE"

# določite dneve
dni = 30

# pretvori dni v sekunde
# time.time () vrne trenutni čas v sekundah
sekunde = čas.čas () – (dnevi * 24 * 60 * 60)

# preverjanje, ali je datoteka na poti ali ne
če obstaja os.path.ex (pot):

# iteracija nad vsako mapo in datoteko na poti
za root_folder, mape, datoteke v os.walk (pot):

# primerjava dni
če sekund >= get_file_or_folder_age (root_folder):

# odstranjevanje mape
remove_folder (root_folder)
delete_folders_count + = 1 # povečanje števila

# prekinitev po odstranitvi korenske mape
zlom

drugo:

# preverjanje mape iz korenske mape
za mapo v mapah:

# mapa pot
folder_path = os.path.join (root_folder, mapa)

# primerjava z dnevi
če sekund >= get_file_or_folder_age (mapa_pot):

# prikliče funkcijo Remove_folder
Remove_folder (mapa_path)
delete_folders_count + = 1 # povečanje števila

# preverjanje trenutnih datotek imenika
za datoteko v datotekah:

# pot datoteke
file_path = os.path.join (korenska mapa, datoteka)

# primerjava dni
če sekund >= get_file_or_folder_age (file_path):

# priklic funkcije remove_file
Remove_file (file_path)
izbrisano_files_count + = 1 # povečanje števila

drugo:

# če pot ni imenik
# primerjava z dnevi
če sekund >= get_file_or_folder_age (pot):

# priklic datoteke
Remove_file (pot)
izbrisano_files_count + = 1 # povečanje števila

drugo:

# datoteke / mape ni mogoče najti
natisni (f ‘"{pot}" ni mogoče najti “)
izbrisano_files_count + = 1 # povečanje števila

tisk (f"Skupno število izbrisanih map: {delete_folders_count}")
tisk (f"Skupno število izbrisanih datotek: {izbrisanih datotek}")

def remove_folder (pot):

# odstranjevanje mape
če ne shutil.rmtree (pot):

# sporočilo o uspehu
tisk (f"{path} je uspešno odstranjen")

drugo:

# sporočilo o napaki
tisk (f"{Path} ni mogoče izbrisati")

def remove_file (pot):

# odstranjevanje datoteke
če ni os.remove (pot):

# sporočilo o uspehu
tisk (f"{path} je uspešno odstranjen")

drugo:

# sporočilo o napaki
tisk (f"{Path} ni mogoče izbrisati")

def get_file_or_folder_age (pot):

# pridobivanje časa datoteke / mape
# čas bo v sekundah
ctime = os.stat (pot) .st_ctime

# vračanje časa
vrniti ctime

če je __name__ == ‘__main__’:
glavni ()

Naslednji dve spremenljivki v zgornji kodi morate prilagoditi glede na zahtevo.

dni = 30
pot = "/ PATH_TO_DELETE"

Odstranjevanje datotek, večjih od X GB

Poiščimo datoteke večje od določene velikosti in jih izbrišemo. Podobno je z zgornjim scenarijem. V prejšnjem scenariju smo vzeli starost kot parameter, in zdaj bomo vzeli velikost kot parameter za izbris.

# uvoz os modula
import os

# funkcija, ki vrne velikost datoteke
def get_file_size (pot):

# pridobivanje velikosti datoteke v bajtih
size = os.path.getsize (pot)

# vrne velikost datoteke
velikost vrnitve

# funkcija za brisanje datoteke
def remove_file (pot):

# brisanje datoteke
če ni os.remove (pot):

# uspeh
tisk (f"{path} je uspešno izbrisan")

drugo:

# napaka
tisk (f"{Path} ni mogoče izbrisati")

def main ():
# določite pot
pot = "ENTER_PATH_HERE"

# dal največjo velikost datoteke v MB
velikost = 500

# preverjanje, ali pot obstaja ali ne
če obstaja os.path.ex (pot):

# pretvorba velikosti v bajte
velikost = velikost * 1024 * 1024

# premikanje po podmapah
za root_folder, mape, datoteke v os.walk (pot):

# iteracija po seznamu datotek
za datoteko v datotekah:

# pridobivanje datoteke
file_path = os.path.join (korenska mapa, datoteka)

# preverjanje velikosti datoteke
če dobite_file_size (file_path) >= velikost:
# priklic funkcije remove_file
Remove_file (file_path)

drugo:

# preverjanje samo, če je pot datoteka
če je os.path.isfile (pot):
# pot ni dir
# neposredno preverjanje datoteke
if get_file_size (pot) >= velikost:
# priklic funkcije remove_file
Remove_file (pot)

drugo:

# pot ne obstaja
tisk (f"{path} ne obstaja")

če je __name__ == ‘__main__’:
glavni ()

Prilagodite naslednji dve spremenljivki.

pot = "ENTER_PATH_HERE"
velikost = 500

Odstranjevanje datotek z določeno pripono

Morda obstaja scenarij, ko želite izbrisati datoteke po njihovih vrstah razširitev. Recimo .log datoteke. Razširitev datoteke lahko najdemo z metodo os.path.splitext (pot). Vrne nabor, ki vsebuje pot in razširitev datoteke.

# uvoz os modul
import os

# glavna funkcija
def main ():

# določite pot
pot = "PATH_TO_LOOK_FOR"

# določite razširitev
podaljšek = ".dnevnik"

# preverjanje, ali pot obstaja ali ne
če obstaja os.path.ex (pot):

# preverite, ali je pot direktorska ali ne
če je os.path.isdir (pot):

# iteracija skozi podmape
za root_folder, mape, datoteke v os.walk (pot):

# preverjanje datotek
za datoteko v datotekah:

# pot datoteke
file_path = os.path.join (korenska mapa, datoteka)

# ekstrahiranje razširitve iz imena datoteke
file_extension = os.path.splitext (file_path) [1]

# preverjanje razširitve datoteke
če je razširitev == razširitev datoteke:

# brisanje datoteke
če ni os.remove (file_path):

# sporočilo o uspehu
tisk (f"{file_path} je bila uspešno izbrisana")

drugo:

# sporočilo o napaki
tisk (f"{File_path} ni mogoče izbrisati")

drugo:

# pot ni imenik
tisk (f"{path} ni imenik")

drugo:

# pot ne obstaja
tisk (f"{path} ne obstaja")

če je __name__ == ‘__main__’:
# priklic glavne funkcije
glavni ()

Ne pozabite posodobiti spremenljivke poti in razširitve v zgornji kodi, da bo ustrezala vašim zahtevam.

Predlagam, da preizkusite skripte v okolju NON PRODUCTION. Ko ste zadovoljni z rezultati, lahko preko cron (če uporabljate Linux) načrtujete, da ga občasno izvajate za vzdrževalna dela. Python je odličen za dosego tega in če se želite naučiti narediti več, to preverite Seveda Udemy.

Oznake:

  • 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