0
#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 文件。这是第一个子目录重命名的专辑封面,但第一个子目录之后没有专辑封面文件被重命名。成功重命名第一个图像后失败,但由于某种原因将其移出其原始目录并进入父“音乐”目录。

4

1 回答 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?根据您的逻辑,它最终会出现在您最初 chdir'ed 的任何位置。鉴于此fn,它ft似乎是静态值,这就是为什么你会得到文件已经存在的原因。

于 2013-03-09T01:13:19.933 回答