【问题标题】:renaming all images in folders using the name of the folder使用文件夹名称重命名文件夹中的所有图像
【发布时间】:2018-11-30 15:08:28
【问题描述】:

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

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

文件夹树和图片是这样的:

问:/1_Projekte/2980/1/43425.jpg

问:/1_Projekte/2980/2/43465.jpg

问:/1_Projekte/2980/3/43483.jpg

问:/1_Projekte/2980/4/43499.jpg

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

【问题讨论】:

  • 您收到错误是因为当程序尝试将第二个文件重命名为 1.jpg 时,它将失败,错误文件已经可用
  • 正如@Rakesh 指出的那样,您不必将名称和扩展名放在同一目录中的文件。
  • 当您的初始假设错误时会发生这种情况:您说“在每个文件夹中,都有 一个 图像”,但实际上不止一个图像。 (或者更确切地说,任何类型的文件 - 您的代码中没有任何内容将其限制为“仅”图像。)
  • @Rakesh - 每个目录中只有一个文件。如果不是这样,你知道有什么方法可以自动将名称更改为 1(1).jpg 或类似的东西,或者我必须以经典方式编写这段代码。
  • @usr2564301 - 我确信子目录中只有一张图片。我找不到为什么代码尝试再次重命名同一个文件。

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    也许这会有所帮助...

    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
    

    此代码确保即使具有现有名称的文件恰好存在,它也会以括号中的数字作为后缀。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-21
      • 1970-01-01
      • 1970-01-01
      • 2013-04-24
      相关资源
      最近更新 更多