gpt4 book ai didi

python - 使用 Python 重命名目录

转载 作者:行者123 更新时间:2023-12-02 00:47:40 25 4
gpt4 key购买 nike

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

我正在尝试:

  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)

谢谢!

最佳答案

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

  1. 您在使用 os.walk 迭代目录时重命名目录。这不是一个好主意,os.walk 为您提供了一个生成器,这意味着它会在您迭代元素时创建元素,因此在循环中重命名内容会使它感到困惑。
  2. for d_idx, d in enumerate(dirlist):for f_idex, f in enumerate(filelist): 迭代声明为空列表的变量之前的那一行,所以那些循环什么都不做。此外,在第二个中,files.append(f) 会将 f 附加到列表 files 中,但是 [1] 末尾的意思是“获取 append 函数返回值的第二个元素(记住 Python 索引是从 0 开始的)”——但是 append 不是返回任何东西(它修改列表,不返回一个新列表),所以这会失败(而且你没有使用 [1] 读取的值,所以它不会做任何事情)。
  3. os.rename(d, f) 中,首先,由于之前的循环永远不会运行,df 将不会有一个值,而且,假设 df 来自 dirsfiles,它们将被赋予作为相对于其父目录的路径,而不是相对于您当前目录 (.) 的路径,因此重命名将失败。

这段代码应该可以如你所愿地工作:

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)

关于python - 使用 Python 重命名目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60488142/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com