Python 重命名多个子文件夹以匹配父文件夹';姓名

Python 重命名多个子文件夹以匹配父文件夹';姓名,python,Python,我是python初学者,但有一些基本经验,我需要有人帮助我使用操作系统模块根据父文件夹重命名子文件夹。在过去的一周里,我一直在寻找答案,但没有取得任何成功。我假设我需要使用os.walk方法来实现这一点 以下是我的文件夹结构: C:\data\test\ C:\data\test\map1 C:\data\test\map1\1617151 C:\data\test\map2 C:\data\test\map2\181719 C:\data\test\map3 C:\data\te

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

以下是我的文件夹结构:

  • C:\data\test\
    • C:\data\test\map1
      • C:\data\test\map1\1617151
    • C:\data\test\map2
      • C:\data\test\map2\181719
    • C:\data\test\map3
      • C:\data\test\map3\182726
    • C:\data\test\map4
      • C:\data\test\map4\894932
我需要这样的结果

  • C:\data\test\
    • C:\data\test\map1
      • C:\data\test\map1\map1
    • C:\data\test\map2
      • C:\data\test\map2\map2
    • C:\data\test\map3
      • C:\data\test\map3\map3
    • C:\data\test\map4
      • C:\data\test\map4\map4
有人能帮忙吗?

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')

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

您可以使用以下一行代码获得所有文件的列表及其各自的文件夹位置:

here = '.' # Current location
files = [(root, files) for root, dirs, files in os.walk(here) if (not dirs and files)]
对于给定的文件夹结构,它将返回:

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

现在可以循环此列表并重命名文件()。您可以通过拆分根字符串(
root.split('\')[-1]
)来获取父文件夹的名称。

谢谢您的回复。我尝试了代码,但得到了以下错误:Traceback(最近一次调用last):File“”,第2行,在TypeError中:“method wrapper”对象没有属性“getitem”,我猜您使用的是python 3。python 3中的生成器没有next方法,但next()函数将完成这项工作。我还更新了答案。由于两个答案中的这一行,我仍然得到相同的错误:
sub\u sub\u dir=os.walk('.')。下一步[1]
TypeError:'method wrapper'对象没有属性'\uu getitem'
哈哈,哇,它从我身边溜走了。这其实是同一个问题。我修复了答案中的代码,但我建议您手动修复您的代码。我在前面的评论中解释了发生的事情。