我需要比较XP机器上的两个文件夹。
这是一个广播电台,我们将所有音乐存储为高比特率mp3,当从CD获取新歌时它们是wav。我需要能够比较mp3和wav文件夹的重复项(命名将是相同的,除了文件扩展名)。目标是生成wav文件夹中没有mp3版本的项目列表。
安装了Python 2.7,我编写的编码经验非常有限。
所有帮助都表示赞赏,即使只是朝着正确的方向发展...... 感谢。
答案 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)))