使用 Python 重命名具有文件名的目录

我正在尝试用其中第一个文件的名称重命名几个目录。

我正在尝试:

  1. 列出文件夹中的文件。

  2. 标识目录。

  3. 对于每个目录,访问它,获取其中第一个文件的名称,然后使用该名称重命名该目录。

这是我到目前为止所得到的,但它不起作用。我知道代码是错误的,但在修复代码之前,我想知道逻辑是否正确。任何人都可以帮忙吗?

import os


for (root, dirs, files) in os.walk('.'):

    print(f'Found directory: {dirpath}')

    dirlist = []

    for d_idx, d in enumerate(dirlist):

        print(d)

    filelist = []

    for f_idex, f in enumerate(filelist):

        files.append(f)[1] 

        print(f)

    os.rename(d, f)


慕娘9325324
浏览 93回答 1
1回答

繁星coding

您的代码中存在一些问题:您正在重命名目录,同时使用 进行迭代。这不是一个好主意,给你一个生成器,这意味着它会在你迭代元素时创建元素,所以重命名循环中的东西会混淆它。os.walkos.walk两者都迭代之前行中声明为空列表的变量,因此这些循环不执行任何操作。此外,在第二个中,将追加到列表中,但最后的意思是“获取函数返回的值的第二个元素(请记住Python索引从0开始)” - 但不返回任何内容(它修改列表,不返回新列表),因此将失败(并且您无论如何都不会使用读取的值, 所以它不会做任何事情)。for d_idx, d in enumerate(dirlist):for f_idex, f in enumerate(filelist):files.append(f)ffiles[1]appendappend[1]首先,由于之前的循环永远不会运行,并且不会有值,但是,假设两者都来自 和 ,它们将被指定为相对于其父级的路径,而不是相对于当前目录(),因此重命名将失败。os.rename(d, f)dfdfdirsfiles.此代码应按预期工作:import os# List of paths to renamerenames = []# Walk current dirfor (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 firstfor 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)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python