2017-12-19 12 views
1

私はディレクトリ内の.wavファイルを持っている「データセット」変更名:Pythonの

import os 
dataset_path = 'C:/dataset' 

def change_filenames(dataset_path): 

    i = 0 # target filename 
    for old_name in os.listdir(dataset_path): 
     os.rename(old_name, str(i) + '.wav') 
     i+=1  

change_filenames(dataset_path) 

エラー:FileNotFoundError:「sound1.wav:[WinError 2]システムは、指定されたファイルを見つけることができません' - >' 0.wav '

エラーの意味は何ですか?ファイルはディレクトリにあり、コードで到達可能ですが、なぜシステムではありませんか?

+2

絶対パスで試しましたか? –

+2

@ Bipulのポイントに追加すると、あなたの現在の作業ディレクトリも考慮されます(疑わしいときは常にフルパスを使用します)。 – Zerodf

答えて

2

Zerodfが指摘するように、現在の作業ディレクトリが指定したdataset_pathディレクトリと同じではない可能性があります。だからos.renamesound1.wavという名前に変わると、現在の作業ディレクトリ(dataset_pathと同じではないかもしれません)でそのファイルを探して見つけられず、そのエラーがスローされます。

変数に絶対パスが含まれているため、os.renameが名前を変更しようとするものはすべて、os.path.join()を使用して各ファイル名をdataset_pathにタックすることによって絶対パスにすることができます。つまり、os.renamesound1.wavの名前を変更するために行くときに、それが問題なく見つける必要がありC:/dataset/sound1.wav、探します

os.rename(os.path.join(dataset_path, old_name), os.path.join(dataset_path, str(i) + '.wav')) 

os.rename(old_name, str(i) + '.wav') 

を変更。

また、getcwd()関数の現在の作業ディレクトリは、osにあります。

import os 

print(os.getcwd()) 
+3

ファイルパスの文字列連結の代わりに 'os.path.join(...)'を使用する方が安全です。 – noslenkwah

+0

@noslenkwahああ、ありがとう。私はその命令が何であるかを覚えようとしていました。回答を更新しています。 os.path.join()は、システムのデフォルトのディレクトリ区切り文字( "/"または "\\"など)を使用して、ファイルパスの2つの部分を結合します。 –

関連する問題