冗余地形成文件夹

Formation of folder redundantly

我有以下structure。我想遍历子文件夹(机器、枪声)并处理 .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()

您使用的 python 是什么版本?不确定这在过去是否已经改变,但是 os.walk 不是 return "subdirs" 作为元组的第一个,而是 dirpath。 python 3.6 参见 here

我不知道你的绝对路径,但看到你将路径 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() 将 return 目录而不是文件。有关此人的信息,请参阅 here

现在您正在循环访问以下目录:

/home/username/myproject/sound/

在这里,我假设您已经制作了图表中的一些目录。所以我假设你有:

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

或类似的东西。

因此永远不会输入 if 语句,因为您的目录名称不以“.wav”结尾。

即使它确实进入了,您仍然会遇到问题,因为 filename 在第一次循环中实际上等于 machine_sound,在第二次循环中等于 gun_shot_sound

也许您正在使用其他一些 wav 库,但是 python 内置函数被调用 wave 并且您需要在文件上调用 wave.open() 而不是wav.read()。请在此处查看文档。

我不确定你试图通过调用 os.path.splitext(filename)[0] 实现什么,但你可以阅读它 here 你最终会得到与此相同的结果大小写,所以 machine_soundgun_shot_sound

您的输出文件将因此导致:

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

在第一个循环中,并且

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

第二次通过。

所以总而言之,我不确定当你说 "MFCC folder is keep forming in already formed MFCC folder" 时发生了什么,但在你理解你自己的代码之前,你肯定需要大量阅读,并且有任何修复的希望它做你想做的事。假设您通读了我提供的链接,您应该能够做到这一点。祝你好运!

此外,您在我编辑的代码中的拼写错误很少,包括非常重要的空白字符。你应该清理它并确保你的代码 运行s 在将它发布到这里之前,然后仔细检查你的 copy/paste 操作没有导致任何错误。如果您稍微整理一下演示文稿,人们会更愿意提供帮助。

for subdir,dirs,files in os.walk(parent_dir):
 for folder in next(os.walk(parent_dir))[1]:
  resultsDirectory= folder + '/MFCC'
  absPath = os.path.join(parent_dir, resultsDirectory)
  if not os.path.isdir(absPath):
    os.makedirs(absPath)
 for filename in os.listdir(subdir):
  print('listdir')
  if filename.endswith('.wav'):
    print("csv file writing")
    (rate,sig) = wav.read(subdir + "/" +filename)
    mfcc_feat = mfcc(sig,rate)
    fbank_feat = logfbank(sig,rate)
    print("fbank_feat")
    outputFile =subdir + "/MFCC"+"/" + os.path.splitext(filename)[0] + ".csv"
    file = open(outputFile, "w+")
    numpy.savetxt(file, fbank_feat, delimiter=",")
    file.close()

此处csv文件存储在子目录中,而不是每个类别的mfcc文件夹中。 我的输出路径文件有问题。