1 回答

TA貢獻1797條經驗 獲得超4個贊
您的代碼中存在一些問題:
您正在重命名目錄,同時使用 進行迭代。這不是一個好主意,給你一個生成器,這意味著它會在你迭代元素時創建元素,所以重命名循環中的東西會混淆它。
os.walk
os.walk
兩者都迭代之前行中聲明為空列表的變量,因此這些循環不執行任何操作。此外,在第二個中,將追加到列表中,但最后的意思是“獲取函數返回的值的第二個元素(請記住Python索引從0開始)” - 但不返回任何內容(它修改列表,不返回新列表),因此將失?。ú⑶夷鸁o論如何都不會使用讀取的值, 所以它不會做任何事情)。
for d_idx, d in enumerate(dirlist):
for f_idex, f in enumerate(filelist):
files.append(f)
f
files
[1]
append
append
[1]
首先,由于之前的循環永遠不會運行,并且不會有值,但是,假設兩者都來自 和 ,它們將被指定為相對于其父級的路徑,而不是相對于當前目錄(),因此重命名將失敗。
os.rename(d, f)
d
f
d
f
dirs
files
.
此代碼應按預期工作:
import os
# List of paths to rename
renames = []
# Walk current dir
for (root, dirs, files) in os.walk('.'):
# Skip this dir (cannot rename current directory)
if root == '.': continue
# Add renaming to list
renames.append((root, files[0]))
# Iterate renaming list in reverse order so deepest dirs are renamed first
for root, new_name in reversed(renames):
# Make new full dir name (relative to current directory)
new_full_name = os.path.join(os.path.dirname(root), new_name)
# Rename
os.rename(root, new_full_name)
添加回答
舉報