URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 9393
[ Назад ]

Исходное сообщение
"удаление файлов по маске на Python'e"

Отправлено Гриша , 26-Фев-12 05:20 
Доброе время суток,гуру)
Вообщем как можно реализовать на Питоне сл. вещь:
есть у меня две ПЭВМ,организованные между собой в одну ЛВС(150.1.1.1 255.255.255.0 name:pv1 ОС RedHat 5, 150.1.1.2 255.255.255.0 name:pv2 ОС Windows Server 2003)
c pv1 удалить файлы которые удовлетворяют требованиям удаления,храниящиеся в pv2 в каталоге С:/files/
Требование для удаления одно-если в первыех 123 байтах проверяемого файла есть последовательность символов "пустойНеНужный", то его удалить...если же этой последовательности в первых 123 байтах файла нет-то его не удаляем...

примерный каркас можете подсказать как это реализовывается?
Заранее очень благодарен!


Содержание

Сообщения в этом обсуждении
"удаление файлов по маске на Python'e"
Отправлено ЕЕ , 26-Фев-12 13:03 
>[оверквотинг удален]
> Вообщем как можно реализовать на Питоне сл. вещь:
> есть у меня две ПЭВМ,организованные между собой в одну ЛВС(150.1.1.1 255.255.255.0 name:pv1
> ОС RedHat 5, 150.1.1.2 255.255.255.0 name:pv2 ОС Windows Server 2003)
> c pv1 удалить файлы которые удовлетворяют требованиям удаления,храниящиеся в pv2 в каталоге
> С:/files/
> Требование для удаления одно-если в первыех 123 байтах проверяемого файла есть последовательность
> символов "пустойНеНужный", то его удалить...если же этой последовательности в первых 123
> байтах файла нет-то его не удаляем...
> примерный каркас можете подсказать как это реализовывается?
> Заранее очень благодарен!

смонтируй шару, возьми содержимое каталга os.listdir(path), прочитать начало файла можно функццией f=open(listdir[i]) а далье f.read() ну и os.remove(path)


"удаление файлов по маске на Python'e"
Отправлено Гриша , 26-Фев-12 15:27 

> смонтируй шару, возьми содержимое каталга os.listdir(path), прочитать начало файла можно
> функццией f=open(listdir[i]) а далье f.read() ну и os.remove(path)

Т.Е. так?
иерархия проверяемых файлов(только файлов очень много) такова:
files:
|-fgt.vob
|-katalog
    |-gythdkc.vob
    |-jifms.vob
|-katalog2
    |-gyrtnf.vob


всё делаю на линуксовой тачке:
1 шаг:
---------------------------------------------------------------
#mount -t cifs //150.1.1.2/files/ /mnt/files -o guest,rw,iocharset=utf8,file_mode=0777,dir_mode=0777
-----------------------------------------------------------------
2 шаг:
создаю сам скрипт,назовём его deleter.py:
------------------------------------------------------------------
# -*- coding: utf-8 -*-
import glob, os, sys, time   # Импортируем необходимые модули
a, c, x = 123, "", 1
t = 1                        # Установка таймаута в секундах; 5400 - 1,5 часа
ra = "vob"                 # Установка расширения, без точки
os.listdir(/mnt/files/)
name = "*"                   # Установка имени файла; * - любое, ? - заменяет любой один символ
time.sleep(t)                # Таймаут
while  x < a:             # Каждый новый цикл, опускает поиск на директорию ниже
      f=open(listdir[x])
      f.read()
      b = "/*"
      put = "."+c+"/"+name+"."+a+"пустойНеНужный"     # Маска-вот тут точно не знаю как проверить 123 байт проверяемого файла,который равен или не равен значению "пустойНеНужный"
      llist = glob.glob(put)          # Осуществляем поиск файлов по маске
      c = c+b
      x = x+1
      l = len(llist)
      while r < l:
         os.remove(/mnt/files/)          # Удаляем файл
         del llist[0]                 # и информацию в списке о нем
         l = len(llist)
         print "Удалён файл"+name
-----------------------------------------------------------
3 шаг на линуксовой тачке запускаю скрипт:
-----------------------------------------------------------
#python deleter.py

и в консоле у меня по идее должны появляться сл сообщения:
Удалён файл gythdkc.vob
Удалён файл gyrtnf.vob

верно?



"удаление файлов по маске на Python'e"
Отправлено ЕЕ , 26-Фев-12 23:45 

import os

def remfile(pth):
    d=os.listdir(pth)
# разбиваем на файлы и директории, как разбить придумай сам
    files=[]
    drs=[]
    for i in d:
        if i is files:
            files.append(i)
        else:
            drs.append(i)
    for i in files:
        s=open(i).read(123)
        if "Ненужно" in s:
            os.remove(i)

    for i in drs:
        remfile(i)


"удаление файлов по маске на Python'e"
Отправлено ЕЕ , 26-Фев-12 23:47 
os.remove(i)
print "удален файл %s" % i

и будет в консоле выводиться


"удаление файлов по маске на Python'e"
Отправлено Гриша , 27-Фев-12 04:12 
>разбиваем на файлы и директории, как разбить придумай сам

Хотел бы сразу поблагодарить за пример!Всё понятно как и что в нём работает)
Единсвенное что-то не получается разбить и сформиролвать отдельный список папок и отдельный список каталогов,используя общий список как в примере это прееменная-d

я пробовал так к примеру:
import os
d=os.listdir(/mnt/files/)
print d
print len(d)
files[]=="" #создаём отдельный список для файлов и обнуляем его
drs[]==""#создаём отдльный список для папок и обнуляем его
j==0
k==0
#создаём цикл проверки на принадлежность к папкам или каталогам элементов в списке d на уровне директории /mnt/files/-правда как создать ещё цикл,чтобы проверялись и подкаталоги все пока не понятно(
for i in d:
    if d[i]=='*.*':
        files[j]==d[i]
        j=j+1
    else:
        drs[k]==d[i]
         k=k+1
print files
print drs
for i in d:
        if i is files:
            files.append(i)
        else:
            drs.append(i)
    for i in files:
        s=open(i).read(123)
        if "Ненужно" in s:
            os.remove(i)
            print "удален файл %s" % i

    for i in drs:
        remfile(i)
-------
как и уже догадались, у меня ничего не получилось(((
listdir-я так понял чистой воды простой список, в котором содержаться имена файлов и папок...попробовал как выше указал этот список разделить отдельно на папки и файлы-что-то не получается((
может как пример подскажите хотя бы один способ?

    
    


"удаление файлов по маске на Python'e"
Отправлено Гриша , 27-Фев-12 09:24 
опечатался..пропустил строку
def remfile(pth)
перед строкой
d=os.listdir(/mnt/files/)


"удаление файлов по маске на Python'e"
Отправлено ЕЕ , 27-Фев-12 18:31 
files[]=="" так в питоне не делают. Достаточно files=[]. чуть по позжа напишу как мона проверить

"удаление файлов по маске на Python'e"
Отправлено Гриша , 28-Фев-12 08:04 
что-то пристально смотрю,но никак видимо времени нет((