Формирование папки с избыточностью - PullRequest
0 голосов
/ 08 ноября 2019

У меня есть следующая структура . Я хочу перебирать подпапки (machine, gunshot) и обрабатывать файлы .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()

Ответы [ 2 ]

0 голосов
/ 13 ноября 2019
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 + "/" + os.path.splitext(filename)[0] + ".csv"
    file = open(outputFile, "w+")
    numpy.savetxt(file, fbank_feat, delimiter=",")
    file.close()

Здесь CSV-файл хранится в подкаталоге, а не в папке mfcc для каждой категории. У меня проблема с файлом выходного пути.

0 голосов
/ 08 ноября 2019

Какую версию python вы используете? Не уверен, что это изменилось в прошлом, но os.walk возвращает не «subdirs» в качестве первого кортежа, а dirpath. Смотрите здесь для Python 3.6.

Я не знаю ваш абсолютный путь, но, учитывая, что вы передаете путь 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() вернет каталоги, а не файлы. Смотрите здесь для человека на этом.

Итак, теперь вы просматриваете каталоги в:

/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], но вы можете прочитать об этом здесь В итоге вы получите то же, что и вхотя в этом случае machine_sound и gun_shot_sound.

Ваш выходной файл будет таким образом:

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

в первом цикле и

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

второй раз до конца.

Итак, в заключение, я не уверен, что происходит, когда вы говорите: «Папка MFCC продолжает формироваться в уже сформированной папке MFCC», но у вас определенно впереди много чтения, прежде чем вы сможете понять свои собственные. код, и есть надежда исправить это, чтобы сделать то, что вы хотите. Предполагая, что вы прочитали ссылки, которые я предоставил, вы должны сделать это, хотя. Удачи!

Кроме того, в вашем коде, который я отредактировал, было довольно мало опечаток, включая очень важные пробельные символы. Вы должны очистить это и убедиться, что ваш код работает, прежде чем публиковать его здесь, а затем дважды проверить, что ваше действие копирования / вставки не привело к ошибкам. Люди будут гораздо охотнее помогать, если вы немного очистите свою презентацию.

...