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'最後から 3 番目の文字が であるかどうかを調べます'.mp3'。それは本当に意味がありません。

使用するだけ.endswith()です:

filename.endswith('.mp3')

コードを修正する場合は、スライスに他の文字が含まれるように文字列をスライスします。

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

また、比較する前にファイル名を小文字に変換します。すべて大文字のファイル名をスキップしてしまう可能性があります。

于 2013-02-19T21:41:39.590 に答える
2

既に述べた [-4] の問題に加えて、for ループで source_files_now を上書きし続けます。ループの上で初期化し、辞書内包表記を使用する代わりに追加するだけです。

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 に答える