仅在 python 的特定子文件夹中重命名文件
rename file only in specific subfolder with python
我有一个包含多个文件夹的路径,每个文件夹都以 '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!
将您的 if 条件更改为
if(old.lower() in name.lower() and 'subfolder2' not in path.lower()):
<rest of the code>
如果所有嵌套的第二个子文件夹都具有相同的名称,即 'subfolder2'
,这应该符合 objective
更新(2021/03/25):
对我有用
我有一个包含多个文件夹的路径,每个文件夹都以 '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!
将您的 if 条件更改为
if(old.lower() in name.lower() and 'subfolder2' not in path.lower()):
<rest of the code>
如果所有嵌套的第二个子文件夹都具有相同的名称,即 'subfolder2'
,这应该符合 objective更新(2021/03/25):
对我有用