Delete files from FTP Server older then 7 days. Using ftputil and ftplib.

MRAB python at mrabarnett.plus.com
Wed May 19 11:43:00 EDT 2010


pilgrim773 wrote:
> Hello I am new to Python programming. I need a write a script which
> will delete files from a FTP server after they have reached a certain
> age, like 7 days for example. I have prepared this code below, but I
> get an error message:
> The system cannot find the path specified: '/test123/*.*' Probably
> someone can help me further? Thank you in advance!
> 
> import os, time, ftputil
> from ftplib import FTP
> 
> ftp = FTP('127.0.0.1')
> print "Automated FTP Maintainance"
> print 'Logging in.'
> ftp.login('admin', 'admin')
> 
> # This is the directory that we want to go to
> directory = 'test123'
> print 'Changing to:' + directory
> ftp.cwd(directory)
> files = ftp.retrlines('LIST')
> print 'List of Files:' + files
> # ftp.remove('LIST')
> 
It's better to pass the full filename instead of changing the directory
because it means that you don't need to keep track of which directory
you're currently in, for example:

     files = ftp.retrlines(directory + '/LIST')

> #-------------------------------------------
> now = time.time()
> for f in os.listdir(directory):
>     if os.stat(f).st_mtime < now - 7 * 86400:
>         if os.directory.isfile(f):
>            os.remove(os.directory.join(directory, f))

The os module works with _local_ files, not the remote files on a
server.

You can list the files and get info about them like this:

     reply = []
     ftp.retrlines("LIST " + directory, reply.append)

'reply' will be a list of lines, one per file, which you can then parse.
It shouldn't be too difficult to write a function to hide the messy
details. :-)

> #except:
>     #exit ("Cannot delete files")

Bare excepts are almost always a very bad idea.

> #-------------------------------------------
> 
> print 'Closing FTP connection'
> ftp.close()
> 




More information about the Python-list mailing list