Python如何读取FTP目录下最新xlsx文件并转为DataFrame或下载到本地
实现方案
你可以在原有获取最新文件名的逻辑基础上,新增二进制文件传输和读取逻辑实现需求,完整可运行代码如下:
import pandas as pd import ftplib from io import BytesIO # 无需本地存储的场景才需要导入 # 原有逻辑:连接FTP、获取最新xlsx文件名 ftp = ftplib.FTP('ftpname.com', 'client','mdp') ftp.retrlines('LIST') ftp.cwd("/DATA") names = ftp.nlst() latest_time = None latest_name = None for name in names: time = ftp.sendcmd("MDTM " + name) if (latest_time is None) or (time > latest_time): latest_name = name latest_time = time print(f"最新文件为:{latest_name}") # ------------------- 新增功能逻辑 ------------------- ## 方案A:先下载到本地,再读取为DataFrame # 以二进制写模式创建本地文件,接收FTP返回的二进制内容 with open(latest_name, 'wb') as f: ftp.retrbinary(f'RETR {latest_name}', f.write) # 读取本地xlsx文件为DataFrame,需要提前安装openpyxl依赖:pip install openpyxl df = pd.read_excel(latest_name) ## 方案B:不保存本地,直接在内存中读取为DataFrame # with BytesIO() as f: # ftp.retrbinary(f'RETR {latest_name}', f.write) # # 将文件指针移动到开头再读取 # f.seek(0) # df = pd.read_excel(f) # 操作完成后关闭FTP连接 ftp.quit() # 后续可正常使用df变量 print(df.head())
注意事项
- xlsx属于二进制文件,必须使用
retrbinary方法传输,不能用文本传输相关方法,否则文件会损坏无法读取 - 不要遗漏FTP连接关闭的步骤,避免长期占用服务器连接资源
- 若使用pandas读取xlsx文件失败,可先执行
pip install openpyxl安装对应解析依赖 - 如果FTP服务器不支持MDTM命令获取修改时间,可以改用
dir方法返回的列表解析时间字段
内容的提问来源于stack exchange,提问作者wysouf
相关产品推荐
相关产品推荐

