使用子文件夹名称重命名文件

时间:2016-06-06 16:30:29

标签: python file rename

我的文件夹结构如下

Folder A(Parent folder)

  Folder B(Sub folder)

   1.jpg
   2.jpg
   3.jpg
   4.jpg

  Folder B1(Sub folder)

   1.jpg
   2.jpg
   3.jpg
   4.jpg

  .....

  Folder Bn(Sub folder)

   1.jpg
   2.jpg
   ...jpg

如何使用子文件夹名称重命名.jpeg文件名,例如B-1.jpg,B-2.jpg ....和B1-1.jpg,B1-2.jpg ......和Bn- 1.jpg,Bn-2.jpg ....

到目前为止我的代码(我已从此question获取代码:

import os
path = os.getcwd()
# get all directories
folders = ([name for name in os.listdir(path)
        if os.path.isdir(os.path.join(path, name))])
for folder in folders:
  for fname in os.listdir(os.path.join(path,folder)):
    new_fname = os.path.basename(os.path.join(path,folder)) + fname.split('.') **# I think error is in here**
    os.rename(os.path.join(path, fname), os.path.join(path, new_fname))

当我运行代码时,它只显示:

Traceback (most recent call last):
  File "<stdin>", line 3, in <module>
TypeError: cannot concatenate 'str' and 'list' objects

我是python的新手,请帮助并使其完整和完美。

2 个答案:

答案 0 :(得分:1)

完成rockteady的答案,你可以使用os.walk和os.path。

ROOT_DIR=os.getcwd()
for root, dirs, files in os.path.walk(ROOT_DIR):
    dname = os.path.split(root)[-1]
    for file in files:
        os.rename(os.path.join(root, file), 
                  os.path.join(root, "{}-{}".format(dname, file))

无论如何,你的代码真正的问题是&#34; split&#34;在那里,输出列表,你不能将列表连接到字符串。

根据您的问题示例,您希望如此:

new_fname = os.path.basename(os.path.join(path,folder)) + fname

答案 1 :(得分:0)

os.walk('pathToRootDir'),以递归方式获取子文件夹。

在下一步中尝试使用类似

的打印语句进行调试
print fname.split('.')

您自己会发现错误,也许可以深入了解拆分功能并尝试以下内容:

print fname.split('.')[0]