Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python2.7中处理文件夹中的所有.wav文件,并将结果附加到单个CSV文件中_Python_Csv_Audio_Export To Csv - Fatal编程技术网

在Python2.7中处理文件夹中的所有.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

在任何给定时间,我的文件夹中都有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有关,而不是从新处理的数据创建新的CSV


任何提示/帮助都将不胜感激

为什么要在循环中创建writer?路径应该是:Path=r'C:\Users\…@ClaytonPipkin,这当然更为传统@反斜杠是一个转义字符。它赋予下一个字符特殊的含义,例如。\n是新行。若要将其用作反斜杠,您需要将其加倍,例如“C:\\Users”,或在字符串前面加上r作为原始字符串,例如“r'C:\Users”,若要写入csv文件的完整行,需要该行所有列的数据立即可用,这意味着已经为所有涉及的文件确定了该行的数据。在一个for循环中,如果不并行地为所有文件生成/计算它,就无法做到这一点……我在最新的代码中不会看到这种情况,除非我遗漏了一个重要的细节。您可以通过增量收集结果,然后在最后一次性将结果写入csv来分别完成此操作。唯一的替代方法是在多个过程中写入csv。