下面是我用于生成JSON文件的脚本。我想知道的是,是否有一种简单的方法来使用此脚本(因为它正在工作),但是仅在文件扩展名为.WAV的情况下才创建项目?
如果没有,我可以将脚本移动到父目录,但是我将如何修改脚本以扫描子目录,而不是扫描脚本所在的目录?那会是def path_architecture(path)所在的行吗?
我愿意回答最简单的答案,但是我也在尝试学习,如果两个问题都可以回答,那真的很酷,因为我确实想了解流程。
import os
import errno
def path_hierarchy(path):
hierarchy = {
'artist': os.path.basename(path),
'album': 'Node 42177',
'url': os.path.join("../audio/", os.path.basename(path)),
'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))
答案 0 :(得分:1)
我不完全理解您提出的第二个选项,但是要回答第一个选项,您可以检查contents
中生成的每个for contents in os.listdir(path)
是否包含.WAV
的循环理解延期。
继续进行设置,如下所示:
...
try:
hierarchy['children'] = [
path_hierarchy(os.path.join(path, contents))
for contents in os.listdir(path)
if '.WAV' in contents
]
...
希望这会有所帮助!
答案 1 :(得分:1)
我不明白您的第二个问题,但要回答您的第一个问题,我发现检查文件类型的最简单方法是:
try:
hierarchy['children'] = [
path_hierarchy(os.path.join(path, contents))
for contents in os.listdir(path)
if file.endswith('.wav'):
# do something
]
答案 2 :(得分:1)
如果您使用的是Python 3,我会使用pathlib模块。它使使用路径和文件更加简单。 (为了说明为什么Path比<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>
替代方法好得多,我采取了一些自由措施。
os