4

我正在尝试创建所有 mp3 文件的字典,其中键是 mp3 文件名,值是该文件的文件路径。

我愿意:

for root, dirs, files in os.walk(rootDir, topdown='true'):
    source_files_now = {filename:root for filename in files if filename[-4] == '.mp3'}
    print(source_files_now);

但是字典 source_files_now 最终是空的。

目录中肯定有mp3文件。

有任何想法吗?

4

3 回答 3

7

filename[-4] == '.mp3'检查倒数第三个字符是否为'.mp3'. 这真的没有意义。

只需使用.endswith()

filename.endswith('.mp3')

如果要修复代码,请对字符串进行切片,以便切片包含其他字符:

filename[-4:] == '.mp3'

在比较之前,我还将文件名转换为小写。您最终可能会跳过全部大写的文件名。

于 2013-02-19T21:41:39.590 回答
2

除了已经提到的 [-4] 问题之外,您还在 for 循环中不断覆盖 source_files_now。在循环上方初始化它并添加到它而不是使用 dict 理解。

source_files_now = {}
for root, dirs, files in os.walk(rootDir):
    for filename in files:
        if filename.endswith('.mp3'):
            source_files_now[filename] = os.path.join(root, filename)

它不会破坏你的脚本,但它应该是 topdown=True,而不是 topdown='true'。我删除了它,因为 True 是默认值。

于 2013-02-19T21:55:54.867 回答
0

您索引字符串略有错误:

>>> s = 'buddyholly.mp3'
>>> s[-4]
'.'
>>> s[-4:]
'.mp3'
于 2013-02-19T21:42:58.323 回答