example ejemplo python ftp ftplib

ejemplo - ¿Es posible leer archivos FTP sin escribirlos usando Python?



python ftp server (1)

Bueno, tiene la respuesta justo delante de usted: el método retrbinary acepta como segundo parámetro una referencia a una función que se llama cada vez que se recupera el contenido del archivo de la conexión ftp.

Aquí hay un ejemplo simple:

#!/usr/bin/env python from ftplib import FTP def writeFunc(s): print "Read: " + s ftp = FTP(''ftp.kernel.org'') ftp.login() ftp.retrbinary(''RETR /pub/README_ABOUT_BZ2_FILES'', writeFunc)

Debe implementar writeFunc para que en realidad agregue los datos leídos a una variable interna, algo como esto, que usa un objeto que se puede llamar:

#!/usr/bin/env python from ftplib import FTP class Reader: def __init__(self): self.data = "" def __call__(self,s): self.data += s ftp = FTP(''ftp.kernel.org'') ftp.login() r = Reader() ftp.retrbinary(''RETR /pub/README_ABOUT_BZ2_FILES'', r) print r.data

Actualización: Me di cuenta de que hay un módulo en la biblioteca estándar de Python que está diseñado para este tipo de cosas, StringIO:

#!/usr/bin/env python from ftplib import FTP from StringIO import StringIO ftp = FTP(''ftp.kernel.org'') ftp.login() r = StringIO() ftp.retrbinary(''RETR /pub/README_ABOUT_BZ2_FILES'', r.write) print r.getvalue()

Estoy tratando de leer archivos usando el ftplib de Python sin escribirlos. Algo más o menos equivalente a:

def get_page(url): try: return urllib.urlopen(url).read() except: return ""

pero utilizando FTP.

Lo intenté:

def get_page(path): try: ftp = FTP(''ftp.site.com'', ''anonymous'', ''passwd'') return ftp.retrbinary(''RETR ''+path, open(''page'').read()) except: return ''''

pero esto no funciona. Los únicos ejemplos en los documentos implican escribir archivos usando el ftp.retrbinary(''RETR README'', open(''README'', ''wb'').write) . ¿Es posible leer archivos ftp sin escribir primero?