我可能对此文件有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字符串的开头,但仍会出错。有人可以告诉我所需的语法吗?
答案 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',
}