操作系统重命名出现文件未找到错误

3

我在尝试编写一个程序,根据文件名中指定的各自组别将大量文件分类到文件夹中。我编写了下面的代码,但是运行它时会出现文件未找到的错误,尽管该文件在给定路径中。希望能得到任何有关问题的帮助。

import os

old_dir = '/Users/User/Desktop/MyFolder'

for f in os.listdir(old_dir):
    file_name, file_ext = os.path.splitext(f)
    file_name.split('-')

    split_file_name = file_name.split('-')

    new_dir = os.path.join(old_dir,
                           '-'.join(split_file_name[:3]),
                           split_file_name[5],
                           f)

    os.rename(os.path.join(old_dir, f), new_dir)

以下是错误信息:

Traceback (most recent call last):
  File "/Users/User/Documents/Sort Files into Folders/Sort Files into Folders.py", line 19, in <module>
    os.rename(os.path.join(old_dir, f), new_dir)
FileNotFoundError: [Errno 2] No such file or directory: '/Users/User/Desktop/MyFolder/AHA35-3_30x1_12-31-7d-g1a1-ArmPro.jpg' -> '/Users/User/Desktop/MyFolder/AHA35-3_30x1_12-31/ArmPro/AHA35-3_30x1_12-31-7d-g1a1-ArmPro.jpg

2
你尝试过打印旧名称和新名称,以确保它们是你认为的吗?它是在每个文件上都失败了,还是只有一些文件失败了? - undefined
是的,旧名称和新名称都符合预期。它在每个文件上都失败了。 - undefined
@Evert 不,我正在尝试创建它们。 - undefined
@Evert 我原以为os.rename会在文件不存在时自动创建它们。我想这就是我的问题所在。谢谢你帮我弄清楚了。 - undefined
2个回答

7

os.rename不会自动递归地创建新目录,如果新名称恰好是不存在的目录中的文件名。

要先创建目录,您可以(在Python 3中)使用:

os.makedirs(dirname, exist_ok=True)

dirname 可以包含子目录(存在或不存在)。


另外,可以使用 os.renames,它可以处理新的和中间的目录。根据文档

递归目录或文件重命名函数。工作原理类似于 rename(),但首先尝试创建任何需要使新路径名正确的中间目录。


0

os.rename需要路径,所以它应该像这样写: os.rename(路径+旧文件名, 路径+新文件名)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接