使用文件夹名称重命名文件夹中的所有图像

时间:2018-06-21 10:09:21

标签: python python-3.x directory file-rename

我有很多文件夹。每个文件夹中都有一个图像。我想使用其文件夹名称重命名所有图像。

例如: 文件夹“ 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

所以每个目录中只有一个文件!

2 个答案:

答案 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

此代码可确保即使存在具有现有名称的文件,该文件也会在后缀中带有数字。