os.rename()上的“WindowsError 183”

时间:2013-03-09 00:58:18

标签: python windowserror

#Opens a directory and outputs a text file there that lists every subdirectory in it

import os
from shutil import move

pathname = raw_input('Enter path for music directory (ex. C:\\Music): ')
fn = raw_input('Enter desired file name for all converted files: ')
ft = raw_input('Enter the file extension you want the program to look for (ex. .jpg): ')
changepath = []
os.chdir(pathname)
for path, subdirs, files in os.walk(pathname):
        for name in files:
            changepath.append(os.path.join(path, name))
for idx, val in enumerate(changepath):
    if val.lower().endswith(ft):
        os.rename(val, (fn + ft))
print('Complete')

我正在使用它将我音乐文件夹中的所有专辑封面重命名为一件事,比如new.jpg。

此代码在第16行“os.rename(val,(fn + ft))”上失败,错误为183.当我使用“os.rename(val,val +(fn + ft))”时,它可以工作但是它调用文件就像old.jpgnew.jpg而不是new.jpg这就是我想要的。

当代码失败时(写在上面的块中),我在音乐目录中得到一个new.jpg文件。它是第一个子目录的重命名的专辑图片,但在第一个子目录之后没有任何专辑图片文件被重命名。成功重命名第一个图像后失败,但由于某种原因将其移出原始目录并进入父“Music”目录。

1 个答案:

答案 0 :(得分:4)

更新了答案

好的,我没有看到应用了不同方法的部分。这样:

os.rename(val, (fn + ft))

为:

os.rename(val, (os.path.dirname(val) + fn + ft))

可能就是你想要的

旧答案

Windows中的错误183适用于already existent file。仔细查看你的代码:

fn = raw_input('Enter desired file name for all converted files: ')
ft = raw_input('Enter the file extension you want the program to look for (ex. .jpg): ')

这里没有明显的路径信息,所以:

for idx, val in enumerate(changepath):
    if val.lower().endswith(ft):
        os.rename(val, (fn + ft))

fn + ft的路径在哪里?根据你的逻辑,它最终会出现在你最初的任何地方。其中fnft似乎是静态值,这就是您获取文件的原因。