#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”目录。
答案 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
的路径在哪里?根据你的逻辑,它最终会出现在你最初的任何地方。其中fn
和ft
似乎是静态值,这就是您获取文件的原因。