在Windows中重命名文件时出现Python错误

时间:2012-01-01 00:55:12

标签: python rename

我试图给文件夹中的所有jpg文件一个随机名称,所以它们在我的数码相框上以半随机顺序出现

这是我正在尝试使用的代码:

import os
import random

for filename in os.listdir("."):
    hold = random.randint(1,100000)
    f=str(hold)+'.jpg'

    if(filename.endswith('.jpg') or (filename.endswith('.JPG'))):
        os.rename(filename,f)

然而,当我运行它时,我得到:

WindowsError: [Error 82] The directory or file cannot be created.

我见过的所有东西都让我看起来我的代码应该有效,我不知道为什么它不会运行。

编辑:好像它是因为我试图重命名的文件名中有空格

EDIT2:我正在将文件复制到格式化为FAT的SD卡,而我运行它的文件夹中有最大数量的项目。我通过将一些文件移动到子目录来解决它。

4 个答案:

答案 0 :(得分:0)

可能你的重命名失败了。尝试在代码中添加一些调试打印,看看它何时失败。在重命名之前添加print 'Renaming %s to %s' % (filename, f)并查看重命名失败时。

答案 1 :(得分:0)

据我所知,问题是变量filename不是实际文件,而是字符串。 os.listdir()返回一个字符串列表,该字符串是该文件夹中的文件名。您需要使用open(“w”,filename)打开文件,然后重命名然后保存。

答案 2 :(得分:0)

在Windows中查看os.rename()的文档,如果您尝试重命名的文件已经存在,它将引发OSError(因为无法实现原子重命名)在操作系统上)。也就是说,如果您重命名JPEG的文件已存在于目录中,os.rename将在Windows上失败。

可能是您尝试将当前目录中的文件重命名为已存在的另一个文件。你必须添加代码来检查它,这不是太困难:

filelist = os.listdir('.')
for filename in filelist:
    hold = random.randint(1,100000)
    f=str(hold)+'.jpg'

 if filename.lower().endswith('.jpg') and f not in filelist:
    os.rename(filename,f)

答案 3 :(得分:0)

我正在将文件复制到格式化为FAT的SD卡,而我运行它的文件夹中有最大数量的项目。我通过将一些文件移动到子目录来解决它。