如何在python脚本中添加目录位置?

时间:2019-06-27 18:06:09

标签: 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))

我已经尽力将所有../audio/插入url字符串的开头,但仍会出错。有人可以告诉我所需的语法吗?

2 个答案:

答案 0 :(得分:3)

在第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”将允许循环忽略文件。

答案 1 :(得分:2)

尝试使用os.path.join

例如:

hierarchy = {
       # 'name': os.path.basename(path),
        'artist': os.path.basename(path),
        'album': 'Node 42177',
        'url': os.path.join("../audio/", os.path.basename(path)),
        'cover_art_url': '../album-art/Radio.jpg',
    }