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?