You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python调用wavfile.read读取wav文件报不存在但文件实际存在

问题背景

需要批量读取5个元音对应的多组wav格式音频文件,为减少重复代码,通过嵌套循环实现文件名拼接与批量读取,初始实现代码如下:

num_experimento = 3
vocals = ["a","e","i","o","u"]

trabajos = "{letter}-int{number}.wav"

for vocal in vocals:
    for n in range (1, num_experimento+1):
        archive = trabajos.format(letter=vocal, number=n)
        sound = wavfile.read(archive)
        print(sound)

运行代码时触发FileNotFoundError,完整报错信息如下:

FileNotFoundError                         Traceback (most recent call last)
Input In [18], in <cell line: 7>()
      8 for n in range (1, num_experimento+1):
      9     archive = trabajos.format(letter=vocal, number=n)
---> 10     sound = wavfile.read(archive)
     11     print(sound)

File c:\programdata\miniconda3\lib\site-packages\scipy\io\wavfile.py:647, in read(filename, mmap)
    645     mmap = False
    646 else:
---> 647     fid = open(filename, 'rb')
    649 try:
    650     file_size, is_big_endian = _read_riff_chunk(fid)

FileNotFoundError: [Errno 2] No such file or directory: 'a-int1.wav'

经人工核对,目标目录下存在与代码拼接名称完全一致的文件;本地为西班牙语使用环境,截图内命名与贴出代码的命名仅语言差异、逻辑完全一致,相关环境截图:当前工作目录、代码与文件列表截图

故障原因

报错核心是Python进程的工作目录与wav文件实际存放目录不匹配,和西语环境、文件名拼写无关:

  • 代码中使用的是不带路径前缀的相对文件名,程序只会在当前Python进程的工作目录下检索目标文件,不会自动扫描其他位置的文件
  • 即使代码脚本和wav文件存放在同一个文件夹,通过Miniconda启动的IPython/Jupyter环境默认工作目录通常是用户主目录,并非脚本所在文件夹,会导致相对路径检索失败
  • 西语系统的字符编码问题会触发Unicode类报错,不会抛出文件不存在的错误,可直接排除该诱因。
解决方法
  • 先校验当前工作目录,确认路径匹配情况
    在读取文件的代码前添加如下代码,打印当前Python进程的实际工作目录:
    import os
    print(os.getcwd())
    
    如果打印出的路径和wav文件实际存放的文件夹路径不一致,即可确认是路径匹配问题。
  • 方案1:直接切换工作目录到音频存放文件夹
    在读取逻辑前添加路径切换代码,将路径替换为本地wav文件存放的绝对路径即可,西语路径可正常识别:
    import os
    # 替换为本地wav文件所在文件夹的绝对路径
    os.chdir(r"C:\替换为\本地wav文件\存放的文件夹路径")
    
  • 方案2:拼接绝对路径读取(更稳妥,推荐)
    提前定义音频文件的根目录,循环时将根目录和文件名拼接为完整绝对路径再读取,不会受工作目录变动影响:
    from scipy.io import wavfile
    import os
    
    num_experimento = 3
    vocals = ["a","e","i","o","u"]
    # 替换为本地wav文件所在文件夹的绝对路径
    audio_base_path = r"C:\替换为\本地wav文件\存放的文件夹路径"
    name_template = "{letter}-int{number}.wav"
    
    for vocal in vocals:
        for n in range (1, num_experimento+1):
            file_name = name_template.format(letter=vocal, number=n)
            full_file_path = os.path.join(audio_base_path, file_name)
            # 可加校验逻辑,返回True代表路径正确
            # print(os.path.exists(full_file_path))
            sound = wavfile.read(full_file_path)
            print(sound)
    

内容的提问来源于stack exchange,提问作者AnkokuGG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 09:30:46