Python中如何将ftplib的retrbinary输出存储至文件对象
Python ftplib retrbinary输出写入内存文件对象实现方案
可以实现,借助Python标准库io模块的BytesIO类即可完成,无需引入第三方依赖,完全适配Lambda无本地磁盘写入的使用场景,也满足你仅使用ftplib、不引入paramiko的要求。
完整实现代码
import ftplib import io import boto3 # 初始化FTP连接 server = ftplib.FTP() server.connect("你的FTP地址", 21) server.login("FTP用户名", "FTP密码") # 创建内存文件对象 file_obj = io.BytesIO() # 直接将FTP返回的二进制内容写入内存对象 server.retrbinary('RETR test.xlsx', file_obj.write) # 重置文件指针到开头,后续读取内容时才会从头部开始 file_obj.seek(0) server.quit() # 直接使用内存对象上传到S3,无需写入本地磁盘 s3 = boto3.client('s3') s3.upload_fileobj(file_obj, '你的S3桶名', 'S3端存储路径/test.xlsx')
补充说明
BytesIO是Python标准库提供的内存缓存类,完全模拟文件对象的行为,它的write方法和本地文件对象的write方法调用逻辑完全一致,可直接作为retrbinary的回调参数使用- 写入完成后必须调用
file_obj.seek(0)重置指针位置,否则后续读取(比如上传S3)时会从内容末尾开始读,拿到空数据 - 整个流程完全不涉及本地磁盘写入,适配Lambda运行环境的限制
内容的提问来源于stack exchange,提问作者Ludwig
相关产品推荐
相关产品推荐

