1 回答
TA贡献1797条经验 获得超4个赞
您的代码中存在一些问题:
您正在重命名目录,同时使用 进行迭代。这不是一个好主意,给你一个生成器,这意味着它会在你迭代元素时创建元素,所以重命名循环中的东西会混淆它。
os.walk
os.walk
两者都迭代之前行中声明为空列表的变量,因此这些循环不执行任何操作。此外,在第二个中,将追加到列表中,但最后的意思是“获取函数返回的值的第二个元素(请记住Python索引从0开始)” - 但不返回任何内容(它修改列表,不返回新列表),因此将失败(并且您无论如何都不会使用读取的值, 所以它不会做任何事情)。
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)
添加回答
举报