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

如何用Python在Jupyter Notebook中遍历子链接并获取指定文件

解决FTP目录遍历与目标文件下载问题

你的问题出在误用了pd.read_table——这个函数是用来读取结构化表格数据的,根本没法解析FTP服务器返回的目录列表,自然实现不了逐层遍历的需求。要处理FTP目录的遍历和文件下载,应该用Python标准库ftplib,下面是可行的实现方案:

直接定位下载目标文件的代码

from ftplib import FTP

# 目标文件在FTP服务器上的路径
ftp_file_path = 'pride/data/archive/2015/05/PXD000790/sdrf.tsv'
# 本地保存文件的路径
local_save_path = './sdrf.tsv'

# 连接FTP服务器,支持匿名登录
ftp = FTP('ftp.pride.ebi.ac.uk')
ftp.login()

try:
    # 切换到目标文件所在的目录
    ftp.cwd('/'.join(ftp_file_path.split('/')[:-1]))
    # 以二进制模式下载文件,避免编码问题
    with open(local_save_path, 'wb') as local_file:
        ftp.retrbinary(f'RETR {ftp_file_path.split("/")[-1]}', local_file.write)
    print(f"文件已成功保存到 {local_save_path}")
finally:
    # 无论是否出错,都关闭FTP连接
    ftp.quit()

代码关键说明

  • FTP('ftp.pride.ebi.ac.uk'):建立与目标FTP服务器的连接
  • ftp.login():该服务器支持匿名访问,无需账号密码直接调用即可登录
  • ftp.cwd():切换到目标文件所在的上级目录
  • ftp.retrbinary():用二进制模式下载文件,保证文件内容完整不损坏

动态遍历目录查找目标文件的扩展代码

如果需要自动遍历目录查找所有sdrf.tsv文件,可以用递归遍历的方式:

from ftplib import FTP

def search_target_file(ftp, current_dir, target_filename):
    # 获取当前目录下的所有条目
    entries = []
    ftp.dir(lambda line: entries.append(line.split()[-1]))
    
    for entry in entries:
        try:
            # 尝试进入子目录
            ftp.cwd(f"{current_dir}/{entry}")
            # 递归查找
            found_path = search_target_file(ftp, f"{current_dir}/{entry}", target_filename)
            if found_path:
                return found_path
            # 回到上级目录
            ftp.cwd('..')
        except:
            # 不是目录则检查是否是目标文件
            if entry == target_filename:
                return f"{current_dir}/{entry}"
    return None

# 使用示例
ftp = FTP('ftp.pride.ebi.ac.uk')
ftp.login()
target_file = search_target_file(ftp, 'pride/data/archive', 'sdrf.tsv')
if target_file:
    print(f"找到目标文件:{target_file}")
    # 可在此添加下载逻辑
ftp.quit()

内容的提问来源于stack exchange,提问作者Hemant Srivastava

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 09:18:13