Python文件路径和过滤仅适用于特定扩展名

时间:2019-06-27 21:46:31

标签: python json

下面是我用于生成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))

3 个答案:

答案 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