Как поменять местами файлы с одним расширением файла с одинаковыми именами, но разными файлами с другим расширением и сохранить структуру каталогов? - PullRequest
0 голосов
/ 19 мая 2018

Я работаю со звуком, и мне нужно несколько файлов, записанных третьей стороной.Для этого мне нужно поменять весь каталог .wav файлов на .mp3s, которые я сжал, при этом сохраняя файловый каталог.Это около 20 000 файлов.

например

wav:

Folder1
  Folder 1a
    sound1.wav
    sound2.wav
  Folder 1b
    sound3.wav
    sound4.wav
Folder2
  Folder 2a
    Folder 2aa
       sound5.wav
       sound6.wav
    Folder 2ab
      sound7.wav
  Folder2b
    sound8.wav
  etc.

mp3:

Folder1
  sound1.mp3
  sound2.mp3
  sound3.mp3
  sound4.mp3
  sound5.mp3
  sound6.mp3
  sound7.mp3
  sound8.mp3
  etc.

Мне пришлось сгруппировать их вместе, чтобы выполнить пакетсжатие в Adobe Audition, но теперь я хотел бы иметь возможность отключать их с помощью файлов wav, которые полностью идентичны, за исключением расширения файлов, поскольку делать это вручную нецелесообразно.

Любая помощь будет в значительной степениоценили.У меня есть небольшой опыт работы с Python, поэтому язык предпочтительнее, но я открыт для любых решений.

Ответы [ 2 ]

0 голосов
/ 19 мая 2018

Я понимаю, что вам нужна та же структура каталогов для mp3, что и для vaw.

Вы можете:

  • просмотреть структуру каталогов файла vaw и создатьсопоставление между базовыми именами (именами файлов без расширения) и относительным путем.

  • , просмотрите структуру каталогов, выполните поиск файлов mp3 и найдите каждый относительный путь в сопоставлении, создав целевую структуру каталогов.если отсутствует, переместите файл в.

Например:

import os

vaw_dir = 'path/to/MyVaw' # parent of Folder1...
musics = {}
for root, dirnames, filenames in os.walk(vaw_dir):
    for filename in filenames:
        basename, ext = os.path.splitext(filename)
        if ext.lower() == '.wav':
            relpath = os.path.relpath(root, vaw_dir)
            print('indexing "{0}" to "{1}"...'.format(filename, relpath))
            musics[basename] = relpath
        else:
            print('skiping "{0}"...'.format(filename))

mp3_dir = 'path/to/MyMp3'
out_dir = vaw_dir  # or somewhere else
for root, dirnames, filenames in os.walk(vaw_dir):
    for filename in filenames:
        basename, ext = os.path.splitext(filename)
        if ext.lower() == '.mp3' and basename in musics:
            relpath = musics[basename]
            path = os.path.join(out_dir, relpath)
            if not os.path.exists(path):
                print('creating directory "{0}"...'.format(path))
                os.makedirs(path)
            src_path = os.path.join(root, filename)
            dst_path = os.path.join(path, filename)
            if src_path != dst_path:
                print('moving "{0}" to "{1}"...'.format(filename, relpath))
                os.rename(src_path, dst_path)
        else:
            print('skiping "{0}"...'.format(filename))
print("Done.")
0 голосов
/ 19 мая 2018

Вы можете использовать комбинацию glob и shutil для этого.Попробуйте запустить этот скрипт изнутри Folder1.

from glob import glob
from shutil import move
import os

wav_files = glob('**/*.wav', recursive=True)
for wf in wav_files:
    file_path = os.path.splitext(wf)[0]
    file_head = os.path.split(file_path)[-1]
    try:
        move('./{}.mp3'.format(file_head), 
             '{}.mp3'.format(file_path))
    except:
        print('Could not find or move file {}.mp3, it may not exist.'.format(file_head))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...