簡體   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