You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 18:30:02