[Tutor PyCZ] ftplib

petr babicka babcca na seznam.cz
Pondělí Srpen 14 15:54:45 CEST 2006


> ------------ Původní zpráva ------------
> Od:  <tutor-request na py.cz>
> Předmět: Tutor Digest, Vol 15, Issue 1
> Datum: 13.8.2006 12:03:43
> ----------------------------------------
> Příspěvky do konference  Tutor zasílejte na adresu:
> 	tutor na py.cz
> 
> Pro přihlášení nebo odhlášení použijte WWW rozhraní na adrese"
> 	http://www.py.cz/mailman/listinfo/tutor
> nebo použijte elektronickou poštu, zašlete slovo help v těle dopisu na
> adresu
> 	tutor-request na py.cz
> 
> Správce konference můžete nalézt na adrese
> 	tutor-owner na py.cz
> 
> Když budete odpovídat na příspěvek, změňte, prosím, Subject: na něco
> rozumnějšího než je: "Re: Contents of Tutor digest..."
> 
> 
> 
> Dnešní menu:
> 
>    1. ftplib (xDlabacekM na seznam.cz)
>    2. Re: ftplib (Tomas Brabenec)
>    3. Re: ftplib (Tomas Brabenec)
>    4. Re: ftplib (xDlabacekM na seznam.cz)
>    5. Re: ftplib ( Petr Hlávka )
> 
> 
> ----------------------------------------------------------------------
> 
> Message: 1
> Date: Sat, 12 Aug 2006 14:47:41 +0200
> From: xDlabacekM na seznam.cz
> Subject: [Tutor PyCZ] ftplib
> To: tutor na py.cz
> Message-ID: <000601c6be0d$86d5d210$7392b00a na marius>
> Content-Type: text/plain; charset="iso-8859-2"
> 
>  
> Zdravím,
> mám dotaz ohledně ftp modulu ftplib. V kořenovém adresáři mám spousty
> souborů, který chci smazat a nechci je vypisovat po jednom. Samotný
> adresář smazat nelze. Takže bych chtěl jen vymazat OBSAH adresáře, a
> nebo vymyslet nějaký zástupný znak pro vše(něco ve stylu delete *.*).
> Děkuji moc
>  
> Marek Dlabáček  
>  
>  
>  
> ------------- další část ---------------
> HTML příloha byla odstraněna...
> URL:
> http://www.py.cz/pipermail/tutor/attachments/20060812/94d3e7ed/attachment.html 
> ------------- další část ---------------
> Netextová příloha byla odstraněna...
> Jméno: [žádný popis není k dispozici]
> Typ: image/gif
> Velikost: 862 bytes
> Popis: [žádný popis není k dispozici]
> Url :
> http://www.py.cz/pipermail/tutor/attachments/20060812/94d3e7ed/attachment-0001.gif
> 
> 
> ------------------------------
> 
> Message: 2
> Date: Sat, 12 Aug 2006 18:00:11 +0200
> From: Tomas Brabenec <konference na brabenec.net>
> Subject: Re: [Tutor PyCZ] ftplib
> To: Konference Tutor portalu PyCZ <tutor na py.cz>
> Message-ID: <44DDFB0B.2080905 na brabenec.net>
> Content-Type: text/plain; charset=ISO-8859-2; format=flowed
> 
> Tak si vypis obsah adresare a v cyklu to potom promaz.
> 
> Tomas Brabenec
> http://brabenec.net | http://uzdroje.cz
>  
> 
> 
> 
> Dne 12.8.2006 14:47, xDlabacekM na seznam.cz napsal(a):
> >
> > Zdravím,
> >
> > mám dotaz ohledně ftp modulu ftplib. V kořenovém adresáři mám spousty 
> > souborů, který chci smazat a nechci je vypisovat po jednom. Samotný 
> > adresář smazat nelze. Takže bych chtěl jen vymazat OBSAH adresáře, a 
> > nebo vymyslet nějaký zástupný znak pro vše(něco ve stylu delete *.*). 
> > Děkuji moc
> >
> >  
> >
> > **Marek Dlabáček** 
> >
> >  
> >
> >  
> >
> >  
> >
> > ------------------------------------------------------------------------
> >
> > _______________________________________________
> > Tutor mailing list
> > Tutor na py.cz
> > http://www.py.cz/mailman/listinfo/tutor
> 
> 
> ------------------------------
> 
> Message: 3
> Date: Sat, 12 Aug 2006 19:49:48 +0200
> From: Tomas Brabenec <konference na brabenec.net>
> Subject: Re: [Tutor PyCZ] ftplib
> To: Konference Tutor portalu PyCZ <tutor na py.cz>
> Message-ID: <44DE14BC.6000104 na brabenec.net>
> Content-Type: text/plain; charset=ISO-8859-2; format=flowed
> 
> Aha, promin,  ted jsem si to precetl znovu a vidim, ze to nechces delat 
> po jednom.
> Sypu si popel na hlavu.
> 
> Tomas Brabenec
> http://brabenec.net | http://uzdroje.cz
>  
> 
> 
> 
> Dne 12.8.2006 18:00, Tomas Brabenec napsal(a):
> > Tak si vypis obsah adresare a v cyklu to potom promaz.
> >
> > Tomas Brabenec
> > http://brabenec.net | http://uzdroje.cz
> >  
> >
> >
> >
> > Dne 12.8.2006 14:47, xDlabacekM na seznam.cz napsal(a):
> >   
> >> Zdravím,
> >>
> >> mám dotaz ohledně ftp modulu ftplib. V kořenovém adresáři mám spousty 
> >> souborů, který chci smazat a nechci je vypisovat po jednom. Samotný 
> >> adresář smazat nelze. Takže bych chtěl jen vymazat OBSAH adresáře, a 
> >> nebo vymyslet nějaký zástupný znak pro vše(něco ve stylu delete *.*). 
> >> Děkuji moc
> >>
> >>  
> >>
> >> **Marek Dlabáček** 
> >>
> >>  
> >>
> >>  
> >>
> >>  
> >>
> >> ------------------------------------------------------------------------
> >>
> >> _______________________________________________
> >> Tutor mailing list
> >> Tutor na py.cz
> >> http://www.py.cz/mailman/listinfo/tutor
> >>     
> > _______________________________________________
> > Tutor mailing list
> > Tutor na py.cz
> > http://www.py.cz/mailman/listinfo/tutor
> >
> >
> >   
> 
> 
> ------------------------------
> 
> Message: 4
> Date: Sat, 12 Aug 2006 22:42:39 +0200
> From: xDlabacekM na seznam.cz
> Subject: Re: [Tutor PyCZ] ftplib
> To: "'Konference Tutor portalu PyCZ'" <tutor na py.cz>
> Message-ID: <000001c6be4f$fa21a2c0$7392b00a na marius>
> Content-Type: text/plain;	charset="iso-8859-2"
> 
> Možná jsem trochu línej, ale těch souborů tam fakt není málo(a to nemám
> velký web-děsí mě myšlenka třeba galerie). Zkoušel jsem pár věcí, ale
> bez úspěchu.
> 
> Marek Dlabáček
> 
> -----Original Message-----
> From: tutor-bounces na py.cz [mailto:tutor-bounces na py.cz] On Behalf Of
> Tomas Brabenec
> Sent: Saturday, August 12, 2006 7:50 PM
> To: Konference Tutor portalu PyCZ
> Subject: Re: [Tutor PyCZ] ftplib
> 
> Aha, promin,  ted jsem si to precetl znovu a vidim, ze to nechces delat 
> po jednom.
> Sypu si popel na hlavu.
> 
> Tomas Brabenec
> http://brabenec.net | http://uzdroje.cz
>  
> 
> 
> 
> Dne 12.8.2006 18:00, Tomas Brabenec napsal(a):
> > Tak si vypis obsah adresare a v cyklu to potom promaz.
> >
> > Tomas Brabenec
> > http://brabenec.net | http://uzdroje.cz
> >  
> >
> >
> >
> > Dne 12.8.2006 14:47, xDlabacekM na seznam.cz napsal(a):
> >   
> >> Zdravím,
> >>
> >> mám dotaz ohledně ftp modulu ftplib. V kořenovém adresáři mám spousty
> 
> >> souborů, který chci smazat a nechci je vypisovat po jednom. Samotný 
> >> adresář smazat nelze. Takže bych chtěl jen vymazat OBSAH adresáře, a 
> >> nebo vymyslet nějaký zástupný znak pro vše(něco ve stylu delete *.*).
> 
> >> Děkuji moc
> >>
> >>  
> >>
> >> **Marek Dlabáček** 
> >>
> >>  
> >>
> >>  
> >>
> >>  
> >>
> >>
> ------------------------------------------------------------------------
> >>
> >> _______________________________________________
> >> Tutor mailing list
> >> Tutor na py.cz
> >> http://www.py.cz/mailman/listinfo/tutor
> >>     
> > _______________________________________________
> > Tutor mailing list
> > Tutor na py.cz
> > http://www.py.cz/mailman/listinfo/tutor
> >
> >
> >   
> _______________________________________________
> Tutor mailing list
> Tutor na py.cz
> http://www.py.cz/mailman/listinfo/tutor
> 
> 
> 
> 
> ------------------------------
> 
> Message: 5
> Date: Sat, 12 Aug 2006 23:32:58 +0200
> From: " Petr Hlávka " <petrhlavka na gmail.com>
> Subject: Re: [Tutor PyCZ] ftplib
> To: "Konference Tutor portalu PyCZ" <tutor na py.cz>
> Message-ID:
> 	<e5258fb30608121432p5502e5ceo418855fa5e142a43 na mail.gmail.com>
> Content-Type: text/plain; charset=ISO-8859-2; format=flowed
> 
> Myslim si, ze to jinak nez po jednom nepujde (a ze to tak musi delat
> kazdy FTP klient). FTP protokol pro to totiz nema zadny prikaz -
> http://www.faqs.org/rfcs/rfc959.html
> 
>   S pozdravem, Petr Hlavka.
> 
> On 8/12/06, xDlabacekM na seznam.cz <xDlabacekM na seznam.cz> wrote:
> > Možná jsem trochu línej, ale těch souborů tam fakt není málo(a to nemám
> > velký web-děsí mě myšlenka třeba galerie). Zkoušel jsem pár věcí, ale
> > bez úspěchu.
> >
> > Marek Dlabáček
> >
> > -----Original Message-----
> > From: tutor-bounces na py.cz [mailto:tutor-bounces na py.cz] On Behalf Of
> > Tomas Brabenec
> > Sent: Saturday, August 12, 2006 7:50 PM
> > To: Konference Tutor portalu PyCZ
> > Subject: Re: [Tutor PyCZ] ftplib
> >
> > Aha, promin,  ted jsem si to precetl znovu a vidim, ze to nechces delat
> > po jednom.
> > Sypu si popel na hlavu.
> >
> > Tomas Brabenec
> > http://brabenec.net | http://uzdroje.cz
> >
> >
> >
> >
> > Dne 12.8.2006 18:00, Tomas Brabenec napsal(a):
> > > Tak si vypis obsah adresare a v cyklu to potom promaz.
> > >
> > > Tomas Brabenec
> > > http://brabenec.net | http://uzdroje.cz
> > >
> > >
> > >
> > >
> > > Dne 12.8.2006 14:47, xDlabacekM na seznam.cz napsal(a):
> > >
> > >> Zdravím,
> > >>
> > >> mám dotaz ohledně ftp modulu ftplib. V kořenovém adresáři mám spousty
> >
> > >> souborů, který chci smazat a nechci je vypisovat po jednom. Samotný
> > >> adresář smazat nelze. Takže bych chtěl jen vymazat OBSAH adresáře, a
> > >> nebo vymyslet nějaký zástupný znak pro vše(něco ve stylu delete *.*).
> >
> > >> Děkuji moc
> > >>
> > >>
> > >>
> > >> **Marek Dlabáček**
> > >>
> > >>
> > >>
> > >>
> > >>
> > >>
> > >>
> > >>
> > ------------------------------------------------------------------------
> > >>
> > >> _______________________________________________
> > >> Tutor mailing list
> > >> Tutor na py.cz
> > >> http://www.py.cz/mailman/listinfo/tutor
> > >>
> > > _______________________________________________
> > > Tutor mailing list
> > > Tutor na py.cz
> > > http://www.py.cz/mailman/listinfo/tutor
> > >
> > >
> > >
> > _______________________________________________
> > Tutor mailing list
> > Tutor na py.cz
> > http://www.py.cz/mailman/listinfo/tutor
> >
> >
> > _______________________________________________
> > Tutor mailing list
> > Tutor na py.cz
> > http://www.py.cz/mailman/listinfo/tutor
> >
> 
> ------------------------------
> 
> _______________________________________________
> Tutor mailing list
> Tutor na py.cz
> http://www.py.cz/mailman/listinfo/tutor
> 
Cest tak nevim jestli ti pomuzu, ale snad jo. Pokud se nemilim tak v ftp
neexistuje funkce ktera umozni vymazat slozku s daty, ale co nejni muze bejt :).
Pokusil jsem se ti napsat kapku mensi kod, kterehj by to mel zvladnout, ale 
je potreba kapku zeditovat modul ftplib. Tak pokud chces tak ti to posilam.
Otevri modul ftplib a prejdi na radek 388 na funkci retrlines(...) a uprav ho:

def retrlines(self, cmd, callback = None):
        '''Retrieve data in line mode.
        The argument is a RETR or LIST command.
        The callback function (2nd argument) is called for each line,
        with trailing CRLF stripped.  This creates a new port for you.
        print_line() is the default callback.'''

        #editovano dne 13.8. 06 Pridano vraceni seznamu s obshem slozek
        seznam=[] #novy
        if callback is None: callback = print_line
        resp = self.sendcmd('TYPE A')
        conn = self.transfercmd(cmd)
        fp = conn.makefile('rb')
        while 1:
            line = fp.readline()
            seznam.append(line) #novy
            if self.debugging > 2: print '*retr*', repr(line)
            if not line:
                break
            if line[-2:] == CRLF:
                line = line[:-2]
            elif line[-1:] == '\n':
                line = line[:-1]
            callback(line)
        fp.close()
        conn.close()
        return seznam,self.voidresp() #novy

Tak aby vypadl nejak takhle. Nyni sme si zajistili vraceni obsahu slozky pro 
dalsi praci. Nyni na prvim miste vraci obsah slozky na druhym odpoved servru.
Tak a ted ten kod na vymazani:

from ftplib import FTP
import string

def smaz(domena,uzivatel,heslo,slozka):
    soubory=[]
    ftp = FTP(domena)
    ftp.login(user=uzivatel,passwd=heslo)
    polozky,odpoved=ftp.retrlines("LIST "+slozka)

    for polozku in polozky:
        soubor=string.split(polozku)
        if not len(soubor) < 1:
            soubory.append(soubor[-1])
    odpoved=raw_input("Chcete pokracovat? (a/n): ")
    if odpoved == "a" or odpoved == "A":
        for soubor in soubory:
            if soubor ==".." or soubor==".":
                pass
            else:
                print "Mazu: %s" % soubor
                ftp.delete(slozka+"\\"+soubor)
        ftp.quit()
    else:
        print "Akce zrusena"
        ftp.quit()

Jako prvni to prebira ftp adresu, dale uz. jmeno, heslo, adresu adresare od 
korenoveho adresare. for example:
  smaz("localhost","xxx","yyy","ftproot")
pred vymazanim to vytiskne obsah slozky a zepta se na smazani.
Na Cerberusu to slape. 
Bugs:
    Soubory, ktere chcete smazat nesmi mit v nazvu mezeru
    slozka ze ktere chcete neco vymazat nesmi obsahovat dalsi slozku
    Nejsou odchytany zadne vijimky, to si muzete dodelat sam :)
    
Snad jsem vam pomohl :)
 
Petr Babička (babča)


Další informace o konferenci Tutor