繁体   English   中英

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

[英]Rename files using sub folder names

我的文件夹结构如下

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 ....

到目前为止,我的代码(我从这个问题中获取了代码:

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的新手,请帮助并使其完整和完美。

完成稳固的答案后,可以使用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))

无论如何,代码上的真正问题是在此处“分割”,输出一个list ,并且您无法将一个列表连接到一个字符串。

根据您的问题示例,您需要这样做:

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

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

在下一步中,尝试使用打印语句进行调试,例如

print fname.split('.')

您将自己发现错误,也许可以更深入地了解split函数并尝试执行以下操作:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM