样本文件夹包含大量样本a,b,c,d,e
。
将最终输出features_with_times
保存到文件时,我希望它附加刚刚处理的文件的名称。
我接近使用Creating a new file, filename contains loop variable, python,我做了以下操作,但收到了小错误。
from __future__ import division
import librosa
import os
import numpy as np
test_src = 'samples/'
path_to_audios = [os.path.join(test_src, f) for f in os.listdir(test_src)]
for audio_path in path_to_audios:
# blah ..
# blah
# blah . .
# blah . .
features_with_times= some_val
# np.savetxt('koo'+ str(k) + '.txt')
print "saving mfcc features"
np.savetxt('mfcc_flwts'+str(audio_path)+'.txt', features_with_times,newline ='\n', delimiter= '\t')
错误:IOError:[错误2]没有这样的文件或目录:' mfcc_flwtssamples / abc.mp3.txt'
如何解决这个问题?如何_prevent samples/
标签介于两者之间。
我知道我可以names_to_append = [f for f in os.listdir(test_src)]
这将保存示例/文件夹中存在的文件的名称。到列表。
如何将这些传递到np.savetxt()
步骤。
新手问题。
更新: 我提出的原始解决方案是减去两个字符串:
a = 'samples/'
b = audio_path
val = b.replace(a,'')
np.savetxt('mfcc_flwts_'+str(val)+'.txt', features_with_times,newline ='\n', delimiter= '\t')
有没有更好的方法来实现我的解决方案。
更新:2:
我也可以将其保存到我选择的文件夹中,如下所示:
save_destination = 'outputss/'
np.savetxt(os.path.join(save_destination,'mfcc_flwts_'+str(val)+'.txt'), features_with_times,newline ='\n', delimiter= '\t')
答案 0 :(得分:1)
您的问题是path_to_audios
包含samples/<filename>
中文件的相对路径,而不仅仅是文件名。一个想法是稍微改变你的循环,所以你只有循环中可用的文件名:
test_src = 'samples/'
filenames = os.listdir(test_src)
path_to_audios = [os.path.join(test_src, f) for f in filenames]
for fn, audio_path in zip(filenames, path_to_audios):
# now you've got path and filename in parallel. If you need to discard the file ending since it's not ".txt",
# split at the dot and take the first part only
fn = fn.split('.')[0]
print "saving mfcc features"
np.savetxt('mfcc_flwts'+str(fn)+'.txt', features_with_times,newline ='\n', delimiter= '\t')
最后一行将结果保存在工作目录中,这也是编写文件名的一种丑陋方式。所以我们想把它改成......
np.savetxt(
os.path.join(your_target_path, 'mfcc_flwts{0}.txt'.format(fn)),
features_with_times,
newline ='\n',
delimiter= '\t'
)