我有很多文件夹。每个文件夹中都有一个图像。我想使用其文件夹名称重命名所有图像。
例如: 文件夹“ 1”具有图像“ 273.jpg”,我想将其更改为“ 1.jpg”并将其保存在另一个目录中。
这是我到目前为止所做的:
import os
import pathlib
root = "Q:/1_Projekte/2980/"
for path, subdirs, files in os.walk(root):
for name in files:
print (pathlib.PurePath(path, name))
os.rename(os.path.join(path, name), os.path.join(path, os.path.basename(path)))
print(os.path.basename(path))
问题在于它仅适用于第一个文件夹,然后跳出错误:
this file is already available...
文件夹树和图像如下:
Q:/1_Projekte/2980/1/43425.jpg
Q:/1_Projekte/2980/2/43465.jpg
Q:/1_Projekte/2980/3/43483.jpg
Q:/1_Projekte/2980/4/43499.jpg
所以每个目录中只有一个文件!
答案 0 :(得分:2)
在这些目录中可能有一些隐藏文件。一探究竟。如果这些文件不是inception_resnet_v2-frozen_graph.pb
,则可以使用以下代码:
jpg
此代码提取文件的扩展名,并检查其是否等于for path, subdirs, files in os.walk(root):
for name in files:
extension = name.split(".")[-1].lower()
if extension != "jpg":
continue
os.rename(os.path.join(path, name), os.path.join(path, os.path.basename(path) + "." + extension))
print(os.path.basename(path))
。如果文件扩展名不是jpg
,则继续语句将运行,并检查下一个文件。如果文件类型为jpg
,脚本将对其重命名。同样,此代码将原始文件扩展名添加到新名称。先前的代码无法处理。
希望对您有所帮助。
答案 1 :(得分:1)
也许这可能对您有帮助...
import os
root = "Q:/1_Projekte/2980/"
subdirs = [x for x in os.listdir(root) if os.path.isdir(x)]
for dir_name in subdirs:
dir_path = root + dir_name + '/'
files = os.listdir(dir_path)
print(dir_name)
print(files)
for i in files:
counter = 1
extension = i.split('.')[-1]
new_name = dir_name + '.' + extension
while True:
try:
os.rename(dir_path + i, dir_path + new_name)
break
except:
# If the file exists...
new_name = dir_name + '({})'.format(counter) + '.' + extension
counter += 1
此代码可确保即使存在具有现有名称的文件,该文件也会在后缀中带有数字。