【问题标题】:rename file only in specific subfolder with python仅使用 python 重命名特定子文件夹中的文件
【发布时间】:2021-06-21 08:28:44
【问题描述】:

我有一个包含多个文件夹的路径,每个文件夹都以“P”开头并以一个单独的数字(“P001”-“P104”)结尾。这些文件夹中的每一个都有两个子文件夹“subfolder1”和“subfolder2”,它们都包含“file_1.nii”和“file_2.nii”。我只想在子文件夹 1 中将“file_1.nii”重命名为“new_name.nii”,而不是在子文件夹 2 中。

此代码适用于重命名所有子文件夹中的文件:

import os

mainpath = 'M:/path'

def replace(folder_path, old, new):
   for path, subdirs, files in os.walk(folder_path):
       for name in files: 
           if(old.lower() in name.lower()):
              file_path = os.path.join(path, name)
              new_name = os.path.join(path, name.lower().replace(old,new))
              os.rename(file_path, new_name)

replace(mainpath, 'file_1.nii', 'new_name.nii')

但它会在所有子文件夹中重命名“file_1.nii”。有谁知道如何扩展代码,所以它只会重命名特定子文件夹中的文件,或者有没有人知道替代解决方案?

TIA!

【问题讨论】:

    标签: python rename subdirectory os.walk os.path


    【解决方案1】:

    将您的 if 条件更改为

    if(old.lower() in name.lower() and 'subfolder2' not in path.lower()):
        <rest of the code>
    

    如果所有嵌套的第二个子文件夹都具有相同的名称,即'subfolder2',这应该符合目标

    更新(2021/03/25):

    对我有用

    【讨论】:

    • 不幸的是,这不起作用。代码运行,但它仍在更改 subfolder2 中的文件名
    • @valid 它对我很有效。用屏幕截图更新了答案
    • 我已经按照您的屏幕截图中的方式复制了路径、文件夹和文件,然后它就可以工作了。但实际上,我的路径要复杂一些:Subfolder1 有另一个子文件夹,直到包含数据的子文件夹。虽然 Subfolder2 之间没有子文件夹。这可能是问题吗?此外,主路径有点长。无论如何,谢谢你到目前为止的帮助@akhil pathirippily
    • subfolder1 或 subfolder2 下的嵌套目录不会对逻辑造成任何问题,因为我们正在检查“'subfolder2' not in path”。如果它正在重命名所有文件,则意味着此条件以某种方式变为真,意味着“subfolder2”子字符串以某种方式丢失或从您的路径字符串值中转义。
    • 如果我的回答对您有帮助,您可以采纳