2013-09-19 1 views
2
from scipy.io.wavfile import read 
files = [f for f in os.listdir('.') if os.path.isfile(f)] 
print files 
for i in range(0,1): 
w = read(files[i]) 
print w 

Мне нужно только прочитать .wav-файлы из рабочего каталога python. И сохраните каждый .wav-файл в виде массива numpy. Это мой код. Но в этом коде все файлы читаются. Я только читаю wav-файлы в каталоге? Как это возможно?Как читать только файлы wav в каталоге с помощью Python?

ответ

3

Используйте модуль glob и передайте ему шаблон (например, *.wav или любые названия файлов). Он вернет список файлов, соответствующих критериям или шаблону.

import glob 
from scipy.io.wavfile import read 

wavs = [] 
for filename in glob.glob('*.wav'): 
    print(filename) 
    wavs.append(read(filename)) 
+0

Теперь я получил folllowing ошибку – santh

+0

Traceback (самый последний вызов последним): Файл " ", строка 3, в Файл" C: \ Anaconda \ lib \ site-packages \ scipy \ io \ wavfile.py ", строка 132, в read fsize = _read_riff_chunk (fid) Файл" C: \ Anaconda \ lib \ site-packages \ scipy \ io \ wavfile.py ", строка 83, в _read_riff_chunk raise ValueError ("Не файл WAV.") ValueError: не WAV-файл. – santh

+0

@santh Кажется, что не все файлы в вашем каталоге, заканчивающиеся на '.wav', являются wav-файлами. Как вы отличить реальные файлы wav от других файлов, если они имеют одинаковое расширение? По содержанию? –

2

Если вы не хотите использовать glob, то что-то, как это будет работать:

files = [f for f in os.listdir('.') if os.path.isfile(f) and f.endswith(".wav")]