确保首先登录ftp服务器。之后,使用
retrbinary以二进制模式提取文件。它在文件的每个块上使用回调。您可以使用它来将其加载到字符串中。
from ftplib import FTPftp = FTP('ftp.ncbi.nlm.nih.gov')ftp.login() # Username: anonymous password: anonymous@# Setup a cheap way to catch the data (could use StringIO too)data = []def handle_binary(more_data): data.append(more_data)resp = ftp.retrbinary("RETR pub/pmc/PMC-ids.csv.gz", callback=handle_binary)data = "".join(data)优点:如何在使用字符串时解压缩字符串?
简易模式,使用上面的数据字符串
import gzipimport StringIOzippy = gzip.GzipFile(fileobj=StringIO.StringIO(data))uncompressed_data = zippy.read()
更好一点,完整的解决方案 :
from ftplib import FTPimport gzipimport StringIOftp = FTP('ftp.ncbi.nlm.nih.gov')ftp.login() # Username: anonymous password: anonymous@sio = StringIO.StringIO()def handle_binary(more_data): sio.write(more_data)resp = ftp.retrbinary("RETR pub/pmc/PMC-ids.csv.gz", callback=handle_binary)sio.seek(0) # Go back to the startzippy = gzip.GzipFile(fileobj=sio)uncompressed = zippy.read()实际上,即时进行解压缩会更好,但是我看不到使用内置库实现压缩的方法(至少不容易)。



