嵌套 glob 目录列表未正确返回

Posted

技术标签:

【中文标题】嵌套 glob 目录列表未正确返回【英文标题】:Nested glob directory listings not returning properly 【发布时间】:2012-04-02 22:38:27 【问题描述】:

我正在尝试修复通过目录树结构传播的(3500 多个)音乐文件中相当数量的 Id3 专辑/艺术家标签,如下所示:

"Winamp Library/Artist Name/Album Name/Song.(mp3/flac/whatever)"

此代码仅打印基本“Winamp 库”目录中的艺术家姓名列表,我做错了什么?

for artist in glob.glob('Winamp Library/*'):
    print(artist)
    for album in glob.glob('Winamp Library/' + artist+  '/*'):
        print (album)

输出:

Winamp Library\Artist 1
Winamp Library\Artist 2

什么时候输出应该是:

Winamp Library\Artist 1
Winamp Library\Artist 1\Album1
Winamp Library\Artist 1\Album2
Winamp Library\Artist 2
etc

【问题讨论】:

使用os.walk(),您可能会发现这项任务更容易。 【参考方案1】:

当您获得 glob 结果时,它也将包含您提供的模式部分,因此您实际上是在尝试在第二个 glob 中进行匹配:

'Winamp Library/Winamp Library/<ARTIST>/*'

我怀疑你想要的更像是:

for artist in glob.glob('Winamp Library/*'):
    print(artist)
    for album in glob.glob(artist + '/*'):
        print (album)

请注意,glob 也可以同时执行多个级别,因此您可以在 'Winamp Library/*/*' 上进行 glob。

【讨论】:

当然!这完美无缺。但是现在将艺术家/专辑存储在变量中以便我可以将其写入 Id3 标签的最简单方法是什么? @SamCoulter 想到的最简单的方法是用 .split() on '/' 分割字符串

以上是关于嵌套 glob 目录列表未正确返回的主要内容,如果未能解决你的问题,请参考以下文章

如何获得使用Dir.glob只有文件的列表?

python中的glob模块

[python]glob模块中的glob()函数为什么返回空列表??

用glob()函数返回目录下的子文件以及子目录

php 使用Glob() 查找文件技巧

Flutter JSON 列表未正确返回