繁体   English   中英

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

[英]Python: Changing filenames and folder names in all folders and subfolders

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

  • 顶级目录
    • 文件 1
    • 文件 2
    • 文件夹 1
      • 文件 1
      • 文件 2
      • 文件 3
      • 文件 4
    • 文件夹 2
      • 文件 1
      • 文件 2
      • 文件 3
      • 文件 4

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

错误信息

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

代码

#Change file names and folder names in a given directory and all its 
subfolders

import os

os.chdir("path\\to\\folder")
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\\folder"):
    for dir_name in dirs:
        os.rename(dir_name, dir_name.replace(" ", "_").lower())


    for file_name in files:
        os.rename(file_name, file_name.replace(" ", "_").lower())



#Print done once all files have been renamed.      
print("done")

难道是您在重命名文件夹时在其上行走而找不到该文件夹​​?

看来您首先需要重命名文件,然后才需要重命名目录(即使那样,请确保其自下而上)

尝试先更改文件名,否则将更改dir_name并丢失引用。

您需要使用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()))

在大多数情况下,以下解决方案均有效,但在对名称进行规范化之后,仍然可能会出现诸如相同名称文件的问题。

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))

在这里,我将每个子文件夹中的所有文件复制到另一个路径。 首先使用os.listdir()在每个文件夹中移动,然后使用它在文件夹路径内的文件中移动。 最后使用os.rename()重命名文件名。 在这里,我将文件名更改为文件夹 name_file 名称,即“folder_file”:

path = 'E:/Data1'
path1 = 'E:/Data2'
for folder in os.listdir(path):
    for file in os.listdir(path + '/'+ folder):
        src = path + '/' + folder + '/' + file
        des = path1 + '/' +  folder + '_' +file
        os.rename(src, des)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM