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

如何基于FTP文件夹树结构创建Python嵌套字典

基于FTP文件夹树生成指定结构字典的实现方案

需求说明

需要基于FTP服务器上的文件夹树(结构如下图),生成一个主字典:键为根目录下的一级子文件夹名称,值为该一级子文件夹下所有直接子子文件夹的名称列表(即使子子文件夹内部还包含其他文件夹,也仅提取当前层级的名称)。

FTP文件夹树结构

期望的目标字典结构示例:

rootpath = r'C:\Users\_M92\Desktop\myFolder'

target_dict = {
    'subfolder1': ['sub-subfolder1', 'sub-subfolder2', 'sub-subfolder3'],
    'subfolder2': ['sub-subfolder1'],
    'subfolder3': ['sub-subfolder1', 'sub-subfolder2']
}

此前尝试结果

此前参考相关方法得到了接近目标的结果,但输出为嵌套字典形式,不符合需求:

result_dict = {
    'subfolder1': {'sub-subfolder1': 'Empty', 'sub-subfolder2': 'Empty', 'sub-subfolder3': 'Empty'},
    'subfolder2': {'sub-subfolder1': 'Empty'},
    'subfolder3': {'sub-subfolder1': 'Empty', 'sub-subfolder2': 'Empty'}
}

实现方案

核心思路

  1. 连接FTP服务器并完成登录验证;
  2. 切换到目标根目录;
  3. 筛选出根目录下的所有一级子文件夹;
  4. 遍历每个一级子文件夹,获取其下所有直接子文件夹的名称;
  5. 将一级子文件夹名作为键,对应子文件夹名称列表作为值存入目标字典;
  6. 操作完成后关闭FTP连接。

代码示例

from ftplib import FTP

def ftp_folder_to_dict(ftp_host, ftp_user, ftp_pass, root_path):
    target_dict = {}
    ftp = FTP(ftp_host)
    ftp.login(ftp_user, ftp_pass)
    
    # 切换到目标根目录
    ftp.cwd(root_path)
    
    # 定义判断是否为文件夹的逻辑(根据FTP服务器返回特性调整)
    def is_folder(item):
        try:
            # 若能获取文件大小则为文件,否则为文件夹
            ftp.size(item)
            return False
        except:
            return True
    
    # 获取根目录下的所有一级子文件夹
    first_level_folders = [item for item in ftp.nlst() if is_folder(item)]
    
    for folder in first_level_folders:
        ftp.cwd(folder)
        # 获取当前文件夹下的直接子文件夹
        sub_folders = [sub_item for sub_item in ftp.nlst() if is_folder(sub_item)]
        target_dict[folder] = sub_folders
        # 返回上一级目录
        ftp.cwd('..')
    
    ftp.quit()
    return target_dict

# 调用示例(替换为你的FTP信息)
ftp_host = "你的FTP服务器地址"
ftp_user = "你的FTP用户名"
ftp_pass = "你的FTP密码"
root_path = "/目标根文件夹路径"

final_result = ftp_folder_to_dict(ftp_host, ftp_user, ftp_pass, root_path)
print(final_result)

注意事项

  • 不同FTP服务器的文件/文件夹标识逻辑可能不同,is_folder函数的判断逻辑需根据实际情况调整(比如部分服务器可通过ftp.dir获取详细权限信息来区分文件和文件夹);
  • 代码会自动过滤根目录下的文件,仅保留一级子文件夹;
  • 遍历过程中会自动返回上一级目录,避免目录切换混乱;
  • 无论子子文件夹内部是否有嵌套,仅提取当前层级的文件夹名称,完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 12:03:14