冗余地形成文件夹
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_sound
和 gun_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文件夹中。
我的输出路径文件有问题。
我有以下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 代码。因此,例如,假设您正在从
/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_sound
和 gun_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文件夹中。 我的输出路径文件有问题。