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

游戏媒体文件整理:如何让Python生成预期嵌套字典结构?

修复游戏媒体文件目录结构整理代码

需求与问题

我正在开发一款游戏,希望将图片和声音文件整理为指定结构的字典,预期格式如下:

Media = {"Images": {"Backgrounds": ['EarthGround.png', 'MarsGround.png', ...], "Sprites": [...]}, "Sounds": ["click.wav", ...]}

文件夹格式示意图:
文件夹格式示意图

我编写了如下代码:

Media = {}

def sortFiles(directory):
    for x in os.listdir(directory):
        if os.path.isdir(f'{directory}/{x}'):
            Media[x] = sortFiles(f'{directory}/{x}')

        elif os.path.isfile(f'{directory}/{x}'):
            return [file for file in os.listdir(directory) if os.path.isfile(f'{directory}/{file}')]


sortFiles("Media")

print(Media)

运行后输出为:

{'Backgrounds': ['EarthGround.png', 'MarsGround.png'], 'Buttons': None, 'Icons': ['selectionBar.png'], 'Main': ['base.png'], 'Planets': None, 'Sprites': None}

可以看到,Backgrounds和Sprites并未如预期嵌套在Images键下,需要修复。


问题根源

代码直接操作全局的Media字典,遍历Media目录下的Images子文件夹时,没有将Images作为键来嵌套它的子目录和文件,反而直接把Images内的子目录(如Backgrounds)放到了Media根字典中。此外,遇到空文件夹时函数返回None,不符合预期格式。

修复后的代码

import os

def sort_files(directory):
    result = {}
    for item in os.listdir(directory):
        item_path = os.path.join(directory, item)
        if os.path.isdir(item_path):
            # 递归处理子目录,获取子目录的结构
            child_content = sort_files(item_path)
            # 空文件夹赋值为空列表,而非None
            result[item] = child_content if child_content else []
        elif os.path.isfile(item_path):
            # 初始化文件列表并添加当前文件
            if 'files' not in result:
                result['files'] = []
            result['files'].append(item)
    
    # 当前目录只有文件时,直接返回文件列表
    if 'files' in result and len(result) == 1:
        return result['files']
    # 当前目录只有子目录时,返回子目录组成的字典
    elif 'files' not in result:
        return result
    # 同时存在子目录和文件的情况(按需保留结构)
    return result

# 生成目标结构的Media字典
Media = sort_files("Media")
print(Media)

关键修复点

  • 不再依赖全局字典,改为递归函数返回当前目录的结构,自然实现层级嵌套。
  • 使用os.path.join拼接路径,适配不同操作系统,避免路径错误。
  • 空文件夹处理为空列表[],替代原来的None,符合预期格式。
  • 自动区分“仅文件目录”和“包含子目录的目录”,分别返回列表或嵌套字典,完美匹配需求结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 22:55:27