3

我需要比较 XP 机器上的两个文件夹。

这是一个广播电台,我们将所有音乐存储为高比特率 mp3,当从 CD 获取新歌曲时,它们是 wav。我需要能够比较 mp3 和 wav 文件夹的重复项(命名将相同,但文件扩展名除外)。目标是生成 wav 文件夹中没有 mp3 版本的项目列表。

安装了 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 回答