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

renaming all images in folders using the name of the folder

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

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

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

可能您在这些目录中有一些隐藏文件。看看这个。如果这些文件不是 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,则继续语句将 运行 并检查下一个文件。如果文件类型是 jpg,脚本会重命名它。此代码还将原始文件扩展名添加到新名称。以前的代码没有处理那个。 希望对你有所帮助。

也许这会有所帮助...

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

此代码确保即使碰巧存在具有现有名称的文件,它也会在括号中加上数字后缀。