上面的代碼使用其當前文件名詳細信息將一組文件夾中的所有文件重命名爲「文件x在x層深」,但我希望它也重命名這些文件的文件夾到「x層深處的文件夾x」,但它給出了一個錯誤,說明該文件夾已在另一個進程中打開。上面的評論是我到現在爲止所做的(沒有成功),其餘的都是按照想要的方式工作。重命名其中的文件夾和文件
import os, re
def everydirectory(path):
for file in os.listdir(path):
file_w_path = os.path.join(path, file)
os.chdir(path)
if os.path.isdir(file_w_path):
os.chdir(file_w_path)
# complete_folder_name = re.search("(deep)([0-9])(FOLDER)([0-9])", file)
# deepness = complete_folder_name.group(2)
# folder_number = complete_folder_name.group(4)
# new_folder_name = "Folder {} at {} levels deep".format(folder_number, deepness)
# new_folder_name_w_path = os.path.join(path, new_folder_name)
# os.rename(file_w_path, new_folder_name_w_path)
# print("Folder " + file_w_path + " renamed to " + new_folder_name_w_path)
everydirectory(file_w_path)
elif os.path.isfile(file_w_path):
path = os.path.join(path, os.getcwd())
extension = os.path.splitext(file_w_path)[1]
complete_file_name = re.search("(deep)([0-9])(FILE)([0-9])", file)
deepness = complete_file_name.group(2)
file_number = complete_file_name.group(4)
new_file_name = "File {} at {} levels deep{}".format(file_number, deepness, extension)
new_file_name_w_path = os.path.join(path, new_file_name)
os.rename(file_w_path, new_file_name_w_path)
print("File " + file_w_path + " RENAMED TO " + new_file_name_w_path)
directory = input("Where is the files?")
everydirectory(directory)
我認爲問題在於它在程序重命名文件夾後重命名文件,使其「丟失」文件的原始位置。有人可以檢查我做錯了什麼嗎?謝謝!
下面是一組文件夾/文件,我怎麼想它在運行腳本之後看:https://drive.google.com/drive/u/1/folders/0B8pLYoI76JJiOEtpNzdaYVZrVXM
通常的方法來這種重命名的任務就是用遞歸來從的底部向上的工作目錄樹。重命名目錄的內容,然後重命名其父項的內容。 –
嘗試在調用'everydirectory(file_w_path)'後對文件夾進行重命名。或者,也許它應該是'everydirectory(new_folder_name_w_path)'使用命名路徑而不是舊路徑? –
@ PM2Ring我怎樣才能使用遞歸?我試着按照你所說的先用函數重命名文件,然後重命名文件夾,但仍然給出相同的錯誤。我讀過關於os.walk(topdown = False)的內容,但不知道如何使用它,這是你在說什麼? – Setti7