Python:字典到Web文件列表

时间:2014-02-07 12:45:59

标签: python web filelist

我有一个文件系统的dict表示,看起来像这样。

{
    "en": {
        'file_name_1': [{meta representation of file_name_1}] or False,
        {'folder_name': {
            'index': [{meta repr. of the index}] or False
            'sub_file_1': [{meta repr. of file_name_1}] or False,
            }
        }
    }
    "fr": {
        <...>
    }
    'tree_root': path to the tree's parent node
}

给定此树(文件或文件夹)中一个叶子的路径,我想将表示该叶子的树表示为HTML嵌套列表。

我不相信我的树会变得非常深,但为了快速,我正在考虑只在树叶的路径上跑一次。

以下是我现在的情况:( self.tree是我的字典,leaf_path我的,嗯。叶子路径。为了简单起见我尝试并清理了我的代码。

rel_URI = [key for key in leaf_path.split(os.sep)]
stack = []

html = u'<ul>'
for key in rel_URI:
    stack.append(key)
    obj = reduce(dict.get, stack, self.tree)
    if isinstance(obj, dict): # a subdir
        html += u'<ul>'
        for _dir in obj.iterkeys() if isinstance(_dir, dict):
            if _dir == rel_URI[len(stack)]: # in the leaf_path
                html += u'<li class="folder">%s</li>' % self.getTitle(obj, _dir)
            else: # not in the leaf_path
                html += u'<li class="folder, far">%s</li>'% self.getTitle(obj,_dir)
        for _file in obj.iterkeys() if isinstance(_file, list):
            html += u'<li class="file, far">%s</li>'% obj[0]['title']
        html += u'</ul>'
    else: # the leaf file
        item = u'<li class="file">%s</li>' % obj[0]['title']
html += '</ul>'

我无法弄清楚如何将下一个子树嵌套到迭代中:它的方式是我完全断开了下一步的步骤,因此我最终得到了一个混乱的嵌套文件列表。 / p>

  • 我的部分麻烦是没有订购dicts

你会如何建立清单?

1 个答案:

答案 0 :(得分:0)

因此,按照Hans的建议,我转向了集合模块中的OrderedDicts

from collections import OrderedDict

然后显式构建OrderedDicts而不是dicts。它们不是很容易打印,而且调试起来比较困难,但它们可以正常工作。

所以,谢谢汉斯。

我最终还是使用了递归来将列表放在正确的位置。