I'm putting together a script to download all the files from a directory via FTP. So far I have managed to connect and fetch one file, but I cannot seem to make to work in batch (get all the files from the directory) Here is what I have so far:
from ftplib import FTP import os, sys, os.path def handleDownload(block): file.write(block) print ".", ddir='C:\\Data\\test\\' os.chdir(ddir) ftp = FTP('test1/server/') print 'Logging in.' ftp.login('user1\\anon', 'pswrd20') directory = '\\data\\test\\' print 'Changing to ' + directory ftp.cwd(directory) ftp.retrlines('LIST') print 'Accessing files' for subdir, dirs, files in os.walk(directory): for file in files: full_fname = os.path.join(root, fname); print 'Opening local file ' ftp.retrbinary('RETR C:\\Data\\test\\' + fname, handleDownload, open(full_fname, 'wb')); print 'Closing file ' + filename file.close(); ftp.close()
I bet you can tell that it does not do much when I run it, so any suggestions for improvements would be greatly appreciated.
format(fn, curr, count) ftp. retrbinary('RETR ' + fn, open(fn, 'wb'). write) ftp. quit() print "download complete."
I've managed to crack this, so now posting the relevant bit of code for future visitors:
filenames = ftp.nlst() # get filenames within the directory print filenames for filename in filenames: local_filename = os.path.join('C:\\test\\', filename) file = open(local_filename, 'wb') ftp.retrbinary('RETR '+ filename, file.write) file.close() ftp.quit() # This is the “polite” way to close a connection
This worked for me on Python 2.5, Windows XP.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With