在任何给定时间,我在文件夹中都有40多个.wav文件。我需要通过功率谱密度(PSD)分析比较每个.wav文件,并将结果吐出成一个大的CSV。理想情况下,每个.wav文件都有一个包含其结果的列...我在stackoveflow上尝试了许多不同的方法,但似乎无法获取每个.wav文件的数据以追加到新列。相反,它似乎会覆盖同一列中的先前结果。
理想情况下,我希望.csv布局类似于以下内容:
每个.wav文件都有一个列并且有一个标题
以下是我的简化代码,其中附加到CSV部分完全无效。
import numpy as np
from scipy.io.wavfile import read
import csv
import glob
import os
import ntpath
csv_name = 'helloclay.csv'
path = r'C:\Users\Desktop\Spectral Work\Blacksmith'
csv_out = open(csv_name, 'wb') #Open CSV before loop so that all results will append to the same file
mywriter = csv.writer(csv_out) # create the csv writer object.
#start loop to process .wav files and write/append to csv
for audioFile in glob.glob(os.path.join(path, '*.wav')):
#Extract Filename for Column Header
(fs, x) = read(audioFile) # sample rate & data
basefilename = ntpath.basename(audioFile) # pull filename from filepath
cutwav = len(basefilename)
sig_name = basefilename[0:cutwav-4] #remove .wav from basefilename to be used for csv_name
cln_name = [sig_name] #change sig_name to array so csv will apply appropriate header
#analysis portion
(num_psd, freqspsd) = psd(x, NFFT=511, Fs=fs, pad_to = 1024)#PSD analysis
psd2=20*np.log(num_psd) #Scale PSD to dB
#write PSD to csv
rows = zip(cln_name) #Write header to column
mywriter.writerows(rows)
rows = zip(psd2) #Write PSD results under header
mywriter.writerows(rows)
csv_out.close()
我已经浏览了stackoverflow,但所有附加到CSV文档的内容都与读取现有的csv有关,而不是从新处理的数据中创建一个新的。
非常感谢任何提示/帮助!