重命名多个子文件夹以匹配父文件夹的名称

时间:2017-03-21 15:22:27

标签: python

我是一个python初学者但有一些基本经验,我需要有人请帮助我使用os模块根据父文件夹重命名子文件夹。我一直在寻找过去一周的答案,但没有取得任何成功。我假设我需要使用os.walk方法来执行此操作。

这是我的文件夹结构:

  • C:\数据\测试\
    • C:\数据\测试\ MAP1
      • C:\数据\测试\ MAP1 \ 1617151
    • C:\数据\测试\ MAP2
      • C:\数据\测试\ MAP2 \ 181719
    • C:\数据\测试\ MAP3
      • C:\数据\测试\ MAP3 \ 182726
    • C:\数据\测试\ MAP4
      • C:\数据\测试\ MAP4 \ 894932

我需要结果看起来像这样。

  • C:\数据\测试\
    • C:\数据\测试\ MAP1
      • C:\数据\测试\ MAP1 \ MAP1
    • C:\数据\测试\ MAP2
      • C:\数据\测试\ MAP2 \ MAP2
    • C:\数据\测试\ MAP3
      • C:\数据\测试\ MAP3 \ MAP3
    • C:\数据\测试\ MAP4
      • C:\数据\测试\ MAP4 \ MAP4

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

python 2.7:

import os

os.chdir("C:\data\test\") # go to dir
sub_dirs = os.walk('.').next()[1] # get list of subdirs
for sub_dir in sub_dirs:
    sub_sub_dir = os.walk('.').next[1] # get sub-subdir
    os.rmdir(sub_sub_dir) # remove sub-subdir
    os.makedirs(sub_dir + '\bla') # make new sub-subdir named subdir\bla

python 3 +:

import os

os.chdir("C:\data\test\")
sub_dirs=next(os.walk('.'))[1] 
for sub_dir in sub_dirs:
    sub_sub_dir = next(os.walk('.'))[1]
    os.rmdir(sub_sub_dir)
    os.makedirs(sub_dir + '\bla')

未经测试,但应该这样做。

答案 1 :(得分:0)

您可以使用以下内容获取所有文件及其相应文件夹位置的列表:

here = '.' # Current location
files = [(root, files) for root, dirs, files in os.walk(here) if (not dirs and files)]

对于给定的文件夹结构,它将返回:

[
  ('C:\data\test\map1', ['1617151']),
  ...
]

您现在可以遍历此列表并重命名文件(https://docs.python.org/3/library/os.html#os.rename)。您可以通过拆分根字符串(root.split('\')[-1])来获取父文件夹的名称。