python ftp获取目录下的文件_Python-FTP下载目录中的所有文件

  • Post author:
  • Post category:python


Python newb here so please bear with me. 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

PS This is not homework :DD

Thanks!!

解决方案

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.