关于python:动态附加已处理的文件名以输出txt文件

dynamically append processed filename to output txt file

samples文件夹有一堆样本a,b,c,d,e

将最终输出features_with_times保存到文件时,我希望它附加刚刚处理的文件的名称。
我接近使用创建一个新文件,文件名包含循环变量,python,我做了以下,但得到小错误。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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 ='
'
, delimiter= '\t')

错误:IOError:[Errno 2]没有这样的文件或目录:'mfcc_flwtssamples / abc.mp3.txt'

如何解决这个问题? 如何_prevent samples/标签介于两者之间。
我知道我可以拥有names_to_append = [f for f in os.listdir(test_src)]
这将保存示例/文件夹中存在的文件的名称。 到列表。

如何将这些传递到np.savetxt()步骤。

新手问题。

更新:
我想出的原始解决方案是减去两个字符串:

1
2
3
4
5
a = 'samples/'
b = audio_path
val = b.replace(a,'')
np.savetxt('mfcc_flwts_'+str(val)+'.txt', features_with_times,newline ='
'
, delimiter= '\t')

有没有更好的方法来实现我的解决方案。

更新:2:

我也可以将它保存到我选择的文件夹中,如下所示:

1
2
3
save_destination = 'outputss/'
    np.savetxt(os.path.join(save_destination,'mfcc_flwts_'+str(val)+'.txt'), features_with_times,newline ='
'
, delimiter= '\t')


您的问题是path_to_audios包含samples/中文件的相对路径,而不仅仅是文件名。 一个想法是稍微改变你的循环,所以你只有循环中可用的文件名:

1
2
3
4
5
6
7
8
9
10
11
12
13
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 ='
'
, delimiter= '\t')

最后一行将结果保存在工作目录中,这也是编写文件名的一种丑陋方式。 所以我们想把它改成......

1
2
3
4
5
6
7
    np.savetxt(
        os.path.join(your_target_path, 'mfcc_flwts{0}.txt'.format(fn)),
        features_with_times,
        newline ='
'
,
        delimiter= '\t'
    )