os.rename()中的"WindowsError 183
#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行出错了,出错信息是183,错误发生在"os.rename(val, (fn + ft))"这行。当我用"os.rename(val, val + (fn + ft))"时就没问题了,但这样会把文件命名成像old.jpgnew.jpg这样的名字,而不是我想要的new.jpg。
当代码出错(就像上面那段代码写的那样)时,我在音乐目录里会看到一个new.jpg文件。这个文件是第一个子目录的专辑封面被重命名后的结果,但之后的专辑封面文件都没有被重命名。代码在成功重命名第一个图片后就出错了,奇怪的是,它把第一个图片从原来的目录移到了上级的“音乐”目录里。
1 个回答
4
更新的回答
好的,我没有注意到使用了不同的方法。这段代码:
os.rename(val, (fn + ft))
变成:
os.rename(val, (os.path.dirname(val) + fn + ft))
这可能就是你想要的结果。
旧的回答
在Windows中,错误183表示有一个已经存在的文件。看了一下你的代码:
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
的路径在哪里呢?根据你的逻辑,它最终会出现在你最初切换到的目录里。考虑到fn
和ft
似乎是固定值,这就是你会收到“文件已存在”错误的原因。