正如你已经提到的,你的问题目前在于你的循环,并确保你在整个目录中都保持在for循环中。
我相当肯定,你当前的问题源于工作目录名值的变化,而你仍在使用它并导致循环中断。要解决此问题,您可以尝试以下代码:
def shorten_folder_names(root_folder, max_length):
with open("folder_names.csv", "w") as file:
for dirpath, dirnames, filenames in os.walk(root_folder):
for i in range(len(dirnames)):
dirname = dirnames[i]
old_name = os.path.join(dirpath, dirname)
if len(dirname) <= max_length:
continue
new_name = os.path.join(dirpath, dirname[:max_length])
os.rename(old_name, new_name)
dirnames[i] = dirname[:max_length]
file.write(f"{old_name} -> {new_name}\n")
在这段代码中,我们使用for i循环来遍历目录名的数量。在循环的每次迭代中,我们都会抓取并设置我们正在查看的当前目录的名称,而不是将当前目录名称用作起始值,然后在循环中更改它。
请注意,这里没有验证检查来确保两个文件名不相同(因为这会给你带来错误),所以你需要考虑这样做!
希望这能有所帮助,祝你好运!