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のような1つの名前に変更しています。

このコードは16行目「os.rename(val、(fn + ft))」でエラー183で失敗します。「os.rename(val、val +(fn + ft))」を使用すると機能しますが、ファイルが呼び出されます。私が欲しいものであるnew.jpgの代わりにold.jpgnew.jpgのようなもの。

コードが失敗すると(上のブロックのように記述されます)、musicディレクトリに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したところならどこにでも行き着くでしょう。それを考えるとfnft静的な値のように見えるので、ファイルはすでに存在します。

于 2013-03-09T01:13:19.933 に答える