尝试遍历目录中的.wav文件(Python)

2024-09-29 21:29:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图遍历包含wav文件列表的目录,如下所示:

enter image description here

我的目标是遍历每个wav文件,并将其添加到名为transcript.wav的wav文件中,该文件位于其父目录中

例如,我希望得到的输出是,对于每个块,都有一个对应的“new_audio”文件,其编号正确。所以“chunk0.wav”变成“new_audio0.wav”“chunk1.wav”变成“new_audio1.wav”,依此类推

这是我的代码:

import os
from pydub import AudioSegment

directory = "C:/Users/Nahuel/Workfiles/audio_chunks"

for file in sorted(os.listdir(directory)):
    filename = os.fsdecode(file)
    if filename.endswith(".wav"):
        p1 = AudioSegment.from_wav(filename)
        p2 = AudioSegment.from_wav("C:/Users/Nahuel/Workfiles/transcript.wav")
        newAudio = p1 + p2
        newAudio.export('new_audio.wav', format="wav")
        continue
    else:
        continue

这就是我得到的错误。它说找不到文件“chunk0.wav”。但它在目录里,所以我只能挠头了

enter image description here

任何帮助都将不胜感激。谢谢你的帮助


Tags: 文件fromimport目录newosfilenameaudio
3条回答

您可以使用glob包和os.path.join()来提供帮助。这段代码还删除了对.wav文件的一些检查,因为您可以使用glob.glob()函数显式搜索这些文件

import os
import glob
from pydub import AudioSegment

directory = os.path.join('c:/', 'Users', 'Nahuel', 'Workfiles')

for file in sorted(glob.glob(os.path.join(directory, 'audio_chunks', '*.wav'))):
    p1 = AudioSegment.from_wav(file)
    p2 = AudioSegment.from_wav(os.path.join(directory, 'transcript.wav')
    newAudio = p1 + p2
    newAudio.export('new_audio.wav', format="wav")

您可能需要为filename使用绝对路径,这取决于Python程序的存储位置。你应使用:

filename = os.path.join(directory, file)

而不是:

filename = os.fsdecode(file)

旁注,检查for循环中的缩进

看起来您只是没有在wav目录中运行代码listdir只需返回文件名,而不是整个路径,您需要加入目录

p1 = AudioSegment.from_wav(os.path.join(directory, filename))

相关问题 更多 >

    热门问题