为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕娘9325324 2022-08-16 10:28:47
我正在尝试用其中第一个文件的名称重命名几个目录。我正在尝试:列出文件夹中的文件。标识目录。对于每个目录,访问它,获取其中第一个文件的名称,然后使用该名称重命名该目录。这是我到目前为止所得到的,但它不起作用。我知道代码是错误的,但在修复代码之前,我想知道逻辑是否正确。任何人都可以帮忙吗?import osfor (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)
查看完整描述

1 回答

?
繁星coding

TA贡献1797条经验 获得超4个赞

您的代码中存在一些问题:

  1. 您正在重命名目录,同时使用 进行迭代。这不是一个好主意,给你一个生成器,这意味着它会在你迭代元素时创建元素,所以重命名循环中的东西会混淆它。os.walkos.walk

  2. 两者都迭代之前行中声明为空列表的变量,因此这些循环不执行任何操作。此外,在第二个中,将追加到列表中,但最后的意思是“获取函数返回的值的第二个元素(请记住Python索引从0开始)” - 但不返回任何内容(它修改列表,不返回新列表),因此将失败(并且您无论如何都不会使用读取的值, 所以它不会做任何事情)。for d_idx, d in enumerate(dirlist):for f_idex, f in enumerate(filelist):files.append(f)ffiles[1]appendappend[1]

  3. 首先,由于之前的循环永远不会运行,并且不会有值,但是,假设两者都来自 和 ,它们将被指定为相对于其父级的路径,而不是相对于当前目录(),因此重命名将失败。os.rename(d, f)dfdfdirsfiles.

此代码应按预期工作:

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)


查看完整回答
反对 回复 2022-08-16
  • 1 回答
  • 0 关注
  • 92 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信