0

私は次の構造を持っています。サブフォルダー (マシン、銃声) を反復処理して .wav ファイルを処理し、各カテゴリの mfccresult フォルダーとその中の .csv ファイルを作成したいと考えています。次のコードがあり、MFCC フォルダーは既に形成されている MFCC フォルダーに形成され続けています。

parent_dir = 'sound'
for subdirs, dirs, files in os.walk(parent_dir):

    resultsDirectory = subdirs + '/MFCC/'
    if not os.path.isdir("resultsDirectory"):
        os.makedirs(resultsDirectory)
    for filename in os.listdir(subdirs):
        if filename.endswith('.wav'):
            (rate,sig) = wav.read(subdirs + "/" +filename)
            mfcc_feat = mfcc(sig,rate)
            fbank_feat = logfbank(sig,rate)
            outputFile = resultsDirectory + "/" + os.path.splitext(filename)[0] + ".csv"
            file = open(outputFile, 'w+')
            numpy.savetxt(file, fbank_feat, delimiter=",")
            file.close()
4

2 に答える 2

0

どのバージョンの python を使用していますか? これが過去に変更されたかどうかはos.walkわかりませんが、最初のタプルとして「サブディレクトリ」を返すのではなく、dirpath を返します。Python 3.6については、こちらを参照してください。

絶対パスはわかりませんが、パスsoundを相対参照として渡しているので、Pythonコードを実行するディレクトリ内のフォルダーであると想定しています。たとえば、このファイルを実行しているとしましょう (mycode.py と呼びましょう)。

/home/username/myproject/mycode.py

そして、いくつかのサブディレクトリがあります:

/home/username/myproject/sound/

そう:

resultsDirectory = subdirs + '/MFCC/'

上記のコードに書かれているように、次のように解決されます。

/home/username/myproject/sound/MFCC/

これは既存のディレクトリではないため、最初の if ステートメントが入力されます。これにより、新しいディレクトリを作成します。

/home/username/myproject/sound/MFCC/

そこから、あなたは取る

filename in os.listdir(subdirs)

これも、この関数の出力に対する誤解のようです。os.listdir()ファイルではなくディレクトリを返します。その男性については、こちらを参照してください。

したがって、次のディレクトリをループしています。

/home/username/myproject/sound/

ここでは、ダイアグラムのいくつかのディレクトリが既に作成されていると仮定します。だから私はあなたが持っていると仮定します:

/home/username/myproject/sound/machine_sound /home/username/myproject/sound/gun_shot_sound

またはそれらの線に沿った何か。

したがって、ディレクトリ名が「.wav」で終わらないため、if ステートメントは入力されません。

入ったとしても、実際には最初のループと2回目のループでfilename等しいので、まだ問題があります。machine_soundgun_shot_sound

他のwavライブラリを使用している可能性がありますが、組み込みの python が呼び出され、 ではなくファイルでwaveを呼び出す必要があります。ドキュメントについては、こちらを参照してください。 wave.open()wav.read()

の呼び出しで何を達成しようとしていたのかはわかりませんが、ここos.path.splitext(filename)[0]でそれについて読むことができます。ただし、この場合に行ったのと同じことになります。machine_soundgun_shot_sound

したがって、出力ファイルは次のようになります。

/home/username/myproject/sound/MFCC/machine_sound.csv

最初のループで、そして

/home/username/myproject/sound/MFCC/gun_shot_sound.csv

2回目。

結論として、「MFCC フォルダーが既に形成された MFCC フォルダーに形成され続ける」と言うとき、何が起こっているのかわかりませんが、自分のコードを理解する前に多くのことを読んで、希望を持っていることは間違いありません。あなたが望むことをするためにそれを修正すること。私が提供したリンクを読んでいると仮定すると、それができるはずです。幸運を!

さらに、私が編集したコードには、非常に重要な空白文字を含むタイプミスがほとんどありませんでした。ここに投稿する前に、それをクリーンアップしてコードが実行されることを確認してから、コピー/貼り付け操作でエラーが発生していないことを再確認してください。プレゼンテーションを少し整理すれば、人々はもっと喜んで助けてくれるでしょう。

于 2019-11-08T14:14:24.263 に答える