首页 > 解决方案 > 如何在 python 脚本中添加目录位置?

问题描述

我可能会对这个文件有 3 个问题,但现在我将专注于这个问题,而不是我需要做的补充。我有一个脚本可以完美地创建目录内容的 json 文件。我遇到的问题在第 9 行。它给我的输出是正确的,但是目录路径没有在音频播放器应用程序中正确加载,因为目录路径需要在前面加上 ../audio/

这是脚本:

import os
import errno

def path_hierarchy(path):
    hierarchy = {
       # 'name': os.path.basename(path),
        'artist': os.path.basename(path),
        'album': 'Node 42177',
        'url': os.path.basename(path),  # HERE!
        'cover_art_url': '../album-art/Radio.jpg',
    }

    try:
        hierarchy['children'] = [
            path_hierarchy(os.path.join(path, contents))
            for contents in os.listdir(path)
        ]
    except OSError as e:
        if e.errno != errno.ENOTDIR:
            raise
        #hierarchy['type'] = 'file'

    return hierarchy

if __name__ == '__main__':
    import json
    import sys

    try:
        directory = sys.argv[1]
    except IndexError:
        directory = "."

    print(json.dumps(path_hierarchy(directory), indent=2, sort_keys=True))

我已经尝试了所有我能想到的在 url 字符串的开头插入 ../audio/ 的方法,但不断出现错误。谁能告诉我需要的语法吗?

标签: python

解决方案


在第 9 行,为了预先添加,您必须调用 os.joi 中的 os.path,如下例所示:

'url': os.path.join("..","audio",os.path.basename(path))

它会给你:

"url": "..\\audio\\path"

另一个建议是更改这部分:

hierarchy['children'] = [
        path_hierarchy(os.path.join(path, contents))
        for contents in os.listdir(path)
    ]

为了这:

hierarchy['children'] = [
        path_hierarchy(os.path.join(path, contents))
        for contents in os.listdir(path)
        if os.path.isdir(os.path.join(path, contents))
    ]

如果您打算只使用目录,则此“if”将允许循环忽略文件。


推荐阅读