在Python2.7中处理文件夹中的所有.wav文件,并将结果附加到单个CSV文件中
在任何给定时间,我的文件夹中都有40多个.wav文件。我需要通过做功率谱密度PSD分析来比较每个.wav文件,并将结果输出到一个大的CSV中。理想情况下,每个.wav文件都会有一列显示其结果。。。我在stackoveflow上尝试了许多不同的方法,但似乎无法获得每个.wav文件的数据以附加到新列中。相反,它似乎覆盖了同一列中以前的结果 理想情况下,我希望.csv布局类似于以下内容: 其中每个.wav文件都有一列和一个标题 下面是我的简化代码,附加到CSV部分完全不起作用在Python2.7中处理文件夹中的所有.wav文件,并将结果附加到单个CSV文件中,python,csv,audio,export-to-csv,Python,Csv,Audio,Export To Csv,在任何给定时间,我的文件夹中都有40多个.wav文件。我需要通过做功率谱密度PSD分析来比较每个.wav文件,并将结果输出到一个大的CSV中。理想情况下,每个.wav文件都会有一列显示其结果。。。我在stackoveflow上尝试了许多不同的方法,但似乎无法获得每个.wav文件的数据以附加到新列中。相反,它似乎覆盖了同一列中以前的结果 理想情况下,我希望.csv布局类似于以下内容: 其中每个.wav文件都有一列和一个标题 下面是我的简化代码,附加到CSV部分完全不起作用 import nump
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有关,而不是从新处理的数据创建新的CSV
任何提示/帮助都将不胜感激 为什么要在循环中创建writer?路径应该是:Path=r'C:\Users\…@ClaytonPipkin,这当然更为传统@反斜杠是一个转义字符。它赋予下一个字符特殊的含义,例如。\n是新行。若要将其用作反斜杠,您需要将其加倍,例如“C:\\Users”,或在字符串前面加上r作为原始字符串,例如“r'C:\Users”,若要写入csv文件的完整行,需要该行所有列的数据立即可用,这意味着已经为所有涉及的文件确定了该行的数据。在一个for循环中,如果不并行地为所有文件生成/计算它,就无法做到这一点……我在最新的代码中不会看到这种情况,除非我遗漏了一个重要的细节。您可以通过增量收集结果,然后在最后一次性将结果写入csv来分别完成此操作。唯一的替代方法是在多个过程中写入csv。