如何从FTP读取.xlsx文件直接转为pandas dataframe 无需写入本地磁盘
实现方案
核心思路是用io.BytesIO内存缓冲区替代本地文件对象,直接把FTP返回的二进制数据写入内存缓冲区,再传给pandas的read_excel方法读取即可,全程不会生成本地文件。
完整实现代码
import ftplib import pandas as pd from io import BytesIO # 初始化FTP连接(此处替换为你的实际FTP连接信息) ftp = ftplib.FTP(host='你的FTP地址', user='FTP用户名', passwd='FTP密码') filename = 'my_excel.xlsx' # 创建内存缓冲区对象 excel_buffer = BytesIO() # 从FTP读取二进制数据直接写入内存缓冲区 ftp.retrbinary('RETR ' + filename, excel_buffer.write, 1024) # 关闭FTP连接 ftp.quit() # 将缓冲区指针移动到文件起始位置,避免读取为空 excel_buffer.seek(0) # 直接从内存缓冲区读取为pandas DataFrame df = pd.read_excel(excel_buffer) # 处理完成后可手动关闭缓冲区,也可由Python自动回收内存 excel_buffer.close()
关键说明
- 核心替换逻辑:把原来的本地文件对象替换为
BytesIO实例,它在内存中模拟了文件对象的读写行为,和本地文件的接口完全兼容,因此ftp.retrbinary的写入方法可以直接复用 - 必须加
seek(0)操作:数据写入完成后缓冲区的指针会停在文件末尾,直接读取会返回空内容,需要手动把指针移动到文件起始位置 - 兼容性扩展:该方法支持所有pandas可读取的二进制文件格式(xlsx、xls、csv等),只需要把后续的读取方法替换为对应的
pd.read_*即可
内容的提问来源于stack exchange,提问作者s900n
相关产品推荐
相关产品推荐

