我的文件夹结构如下
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的新手,请帮助并使其完整和完美。
答案 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]