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

Я пытаюсь реорганизовать архитектуру моего набора данных в другой удобный.

Учитывая следующую архитектуру:

Dataset/A/0000/left/
Dataset/A/0000/right/
Dataset/A/0001/left/
Dataset/A/0001/right/
    . 
    .
Dataset/A/0750/left/
Dataset/A/0750/right/

Dataset/B/0000/left/
Dataset/B/0000/right/
Dataset/B/0001/left/
Dataset/B/0001/right/
    . 
    .
Dataset/B/0750/left/
Dataset/B/0750/right/

Как собрать все «левые» и «правые» подпапки в отдельные каталоги с переименованием, чтобы они имели следующую архитектуру:

Dataset/left/0000 ###  A sub-folder
Dataset/left/0001
    .
    .
Dataset/left/0750
Dataset/left/0751 ###  B sub-folder
Dataset/left/0752
    .
    .
Dataset/left/1500

1 Ответ

0 голосов
/ 08 мая 2019

Это должно сделать это:

import os
import shutil

try:
  # Mock the problem
  for i in range(750):
    os.makedirs("Dataset/A/0{}/left".format(i), )
    os.makedirs("Dataset/A/0{}/right".format(i))
    os.makedirs("Dataset/B/0{}/left".format(i))
    os.makedirs("Dataset/B/0{}/right".format(i))

  os.mkdir("./Dataset/left")
  os.mkdir("./Dataset/right")

except FileExistsError as e:
  pass


# See pythoncentral.io/how-to-recursively-copy-a-directory-folder-in-python/
def copyDirectory(src, dest):
    try:
        shutil.copytree(src, dest)
    # Directories are the same
    except shutil.Error as e:
      pass
    # Any error saying that the directory doesn't exist
    except OSError as e:
        pass

def move(sub):
  for file, subfolder, folder in os.walk(sub):
    if file.split("/")[-1] in ["right", "left"]:
      src = file
      dest = "./Dataset/{}/{}".format(
      file.split("/")[-1],
      file.split("/")[-2]
      )
      copyDirectory(src, dest)

move("./Dataset/A")
move("./Dataset/B")

По сути, что делает этот скрипт: A) создать макет вашего файлового дерева, B) определить функцию для копирования каталога и C) определить функцию move для обхода целевых подпапок и применить функцию из B

...