比较文件夹内容

时间:2012-06-23 08:15:29

标签: python

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

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

安装了Python 2.7,我编写的编码经验非常有限。

所有帮助都表示赞赏,即使只是朝着正确的方向发展...... 感谢。

3 个答案:

答案 0 :(得分: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(但不是递归),则必须同时存储basename和完整文件名:

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']]

答案 1 :(得分: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))

答案 2 :(得分:1)

这是一个递归工作的解决方案,稍微基于 phihag answer

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)))