动态附加已处理的文件名以输出txt文件

时间:2018-02-08 16:24:44

标签: python numpy save

样本文件夹包含大量样本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')

1 个答案:

答案 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'
    )