【问题标题】:os.walk renaming folders which contain a '.'os.walk 重命名包含“。”的文件夹
【发布时间】:2021-10-20 22:32:17
【问题描述】:

我使用以下代码替换目录中的文件/文件夹名称。

old = abc
new = def

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

这可行,但是,我有一个名为 abc.files os.walk 的文件夹没有看到此文件夹,我该如何修复代码,以便将 abc.files 更改为 def.files

【问题讨论】:

  • 如果abc.files 是一个子目录,那么它将在subdirs 列表中,而不是files 列表中。你只是在迭代files
  • 另外,new = def 是一个错误。你的意思是new = "def"
  • 如果你在走的时候重命名目录,你应该使用topdown=False,这样它会在重命名之前进入子目录。

标签: python os.walk


【解决方案1】:

正如评论中提到的,您只是重命名文件,而不是子目录,因为您没有循环遍历 subdirs 列表。试试这个:

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

topdown = False 确保它会在重命名之前进入子目录。

【讨论】:

    猜你喜欢
    • 2019-02-05
    • 1970-01-01
    • 2019-03-05
    • 2021-08-08
    • 2014-03-05
    • 1970-01-01
    • 2016-02-05
    • 2018-01-25
    • 1970-01-01
    相关资源
    最近更新 更多