在stackoverflow上有很多关于检索FTP文件并将其写入流(如字符串缓冲区或文件)的答案,然后可以对其进行迭代。
但是,这些解决方案涉及将整个文件加载到内存中或在开始处理内容之前将其下载到磁盘中。
我没有足够的内存来缓冲整个文件,也无法访问磁盘。这可以通过在回调函数中处理数据来完成,但我想知道是否可能将FTP代码包装在一些神奇的东西中,以返回迭代器而不是在我的代码中添加回调。
即:而不是:
def get_ftp_data(handle_chunk):
...
ftp.login('uesr', 'password') # authentication required
ftp.retrbinary('RETR etc', handle_chunk)
...
get_ftp_data(do_stuff_to_chunk)
我想要:
for chunk in get_ftp_data():
do_stuff_to_chunk(chunk)
与现有答案不同的是,我希望在迭代之前不需要将整个ftp文件写入磁盘或内存中。