關於檢索FTP文件並將其寫入流(如字符串緩衝區或文件,然後可以迭代)的堆棧溢出有幾個答案。Python FTP「塊」迭代器(沒有將整個文件加載到內存中)
如:Read a file in buffer from FTP python
然而,這些解決方案涉及加載整個文件到內存或將其下載到磁盤開始之前處理該內容。
我沒有足夠的內存來緩衝整個文件,我無法訪問磁盤。這可以通過處理回調函數中的數據來完成,但我想知道是否有可能用一些魔術來包裝ftp代碼,這會返回一個迭代器,而不是用回調來代替我的代碼。
I.E.而不是:
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文件到硬盤或內存。
有類似的問題(http://stackoverflow.com/questions/9968592/turn-functions-with-a-callback-into- [按功能有回調到Python生成?] python-generators) –