3

XPマシン上の2つのフォルダーを比較する必要があります。

これはラジオ局です。すべての音楽を高ビットレートのmp3として保存しており、CDから新しい曲を取得するとwav形式になります。mp3フォルダーとwavフォルダーの重複を比較できるようにする必要があります(ファイル拡張子を除いて名前は同じになります)。目的は、mp3バージョンを持たないwavフォルダー内のアイテムのリストを作成することです。

Python 2.7がインストールされており、コーディングの私の非常に限られた経験はpythonでした。

たとえそれが正しい方向への単なるキックであったとしても、すべての助けに感謝します...ありがとう。

4

3 に答える 3

6

os.listdirフォルダーの内容を取得しos.path.splitext、ベース名を決定するために使用します。

import os
wavs = set(os.path.splitext(fn)[0] for fn in os.listdir('/path/to/wavs'))
mp3s = set(os.path.splitext(fn)[0] for fn in os.listdir('/path/to/mp3s'))
must_convert = wavs - mp3s

複数のフォルダーの mp3 と wav を (再帰的にではなく) 照合する場合は、ベース名と完全なファイル名の両方を保存する必要があります。

import os,collections
files = collections.defaultdict(dict)
for d in ['/path/to/wavs', '/more/wavs', '/some/mp3s', '/other/mp3s']:
    for f in os.listdir(d):
        basename,ext = os.path.splitext(f)
        files[ext][basename] = os.path.join(d, f)
files_to_convert = [fn for basename,fn in files['.wav'].items()
                       if basename not in files['.mp3']]
于 2012-06-23T08:21:15.397 に答える
2
    import os
    wav=[os.path.splitext(x)[0] for x in os.listdir(r'C:\Music\wav') if os.path.splitext(x)[1]=='.wav']
    mp3=[os.path.splitext(x)[0] for x in os.listdir(r'C:\Music\mp3') if os.path.splitext(x)[1]=='.mp3']  

   #here wav is a list names of only those files whose extension is .wav 
   #here mp3 is a list names of only those files whose extension is .mp3 

    print(set(wav)-set(mp3))
于 2012-06-23T08:27:34.793 に答える
1

phihag答えに少し基づいて、再帰的に機能するソリューションを次に示します。

import os
sets = {}
for dirname in 'mp3_folder', 'wav_folder':
    sets[dirname] = set()
    for path, dirs, files in os.walk(dirname):
        sets[dirname].update(os.path.join(path, os.path.splitext(fn)[0]).lstrip(dirname) for fn in files)
must_convert = sets['mp3_folder']-sets['wav_folder']
print('\n'.join(sorted(must_convert)))
于 2012-06-23T08:39:13.200 に答える