【问题标题】:How to rename then move specific subfolders to another directory?如何重命名然后将特定子文件夹移动到另一个目录?
【发布时间】:2019-09-26 05:52:04
【问题描述】:

我正在尝试将我的数据集架构重组为另一个方便的架构。

鉴于以下架构:

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

【问题讨论】:

  • 你试过了吗?
  • 我不太明白您是如何收集文件夹的。但是您可以使用 os 和/或shutil 轻松做到这一点。只需谷歌它,您就可以看到如何移动和重命名文件和目录。
  • 使用os.path.split(file_path_with_name)[0.split('/')[-1] 使用它来获取left or right 类型,然后使用该信息将该文件移动到使用os.copy 定义的位置

标签: python rename move subdirectory


【解决方案1】:

应该这样做:

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中的函数

【讨论】:

  • 感谢您的回复,但实际上,您的代码所做的只是在同一个位置创建存在于 A 和 B 子目录中的相同文件夹,换句话说,它只是复制了文件夹架构如下:Dataset/A/0001/left/Dataset/A/0001/right/Dataset/A/01/left/Dataset/A/01/right/
猜你喜欢
  • 2021-03-14
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 2014-12-19
  • 2017-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多