Python:更改所有文件夹和子文件夹中的文件名和文件夹名称

时间:2018-02-18 15:49:25

标签: python

我想更改给定目录和所有子文件夹中的文件名和文件夹名称。我的文件夹结构如下:

  • 顶级目录
    • 文件1
    • file2的
    • folder1中
      • 文件1
      • file2的
      • file3的
      • file4将
    • 文件夹2
      • 文件1
      • file2的
      • file3的
      • file4将

执行下面的代码时出现以下错误。我已经检查了论坛,但找不到解决方案。有人可以帮我解决这个问题,让我知道我需要做些什么才能让程序正常运行? 或者是否有更好的解决方案来重命名树中的文件和文件夹?

错误消息

  

FileNotFoundError:[WinError 2]系统找不到指定的文件:'Filename 1' - > 'filename_1'

代码

I/System.out: Before:
I/System.out: false
I/System.out: false
I/System.out: After:
I/System.out: false
I/System.out: false

4 个答案:

答案 0 :(得分:0)

可能是因为你在重命名文件时走在文件夹上而无法找到它?

看起来你首先需要重命名文件,然后才重命名(甚至那时 - 确保它是自下而上的)

答案 1 :(得分:0)

首先尝试更改文件名,否则您将更改dir_name并丢失参考。

答案 2 :(得分:0)

您需要使用root,否则重命名无法找到路径:

for root, dirs, files in os.walk("path/to/folder"):
    for name in dirs + files:
        os.rename(os.path.join(root, name), os.path.join(root, name.replace(" ", "_").lower()))

答案 3 :(得分:0)

以下解决方案大部分时间都可以使用,在规范化名称后,仍然可能存在类似名称文件的问题。

import os

os.chdir("path/to/dir")
print(os.getcwd())

#Walk the directory and change the file names and folder names in all folders and subfolders.

for root, dirs, files in os.walk("path/to/dir", topdown=False):
   for file_name in files:
      new_name = file_name.replace(" ", "_").lower()
      if (new_name != file_name):
         os.rename(os.path.join(root, file_name), os.path.join(root, new_name))

   for dir_name in dirs:
      new_name = dir_name.replace(" ", "_").lower()
      if (new_name != dir_name):
         os.rename(os.path.join(root, dir_name), os.path.join(root, new_name))