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

Python保存features_with_times文件时IOError报错修复及路径问题解决

看起来你遇到的是典型的路径拼接踩坑问题,咱们一步步拆解解决:

问题根源分析

你看到的IOError: [Errno 2] No such file or directory主要有两个原因:

  • 路径拼接逻辑错误:你手动拼接输出前缀(比如mfcc_flwts)和样本路径时,没加目录分隔符,导致前缀和samples直接粘在一起,形成了mfcc_flwtssamples/...这种无效路径,系统自然找不到。
  • 输出目录可能未提前创建:就算路径拼对了,如果存放输出文件的目录不存在,Python也会抛出找不到路径的错误。

另外你提到要避免samples/出现在输出文件名里,本质是要提取样本文件的纯文件名,而不是带目录的完整路径。

修复方案与代码示例

咱们用Python自带的路径处理工具来规范操作,从根源避免手动拼接的低级错误:

1. 先确保输出目录存在

不管用哪种方式,先检查并创建输出目录,防止因为目录不存在报错:

import os

# 定义你的输出目录,比如想把结果存在mfcc_flwts文件夹下
output_dir = "mfcc_flwts"
# exist_ok=True表示如果目录已存在,不会抛出错误
os.makedirs(output_dir, exist_ok=True)

2. 正确拼接输出文件名(自动去掉samples/前缀)

假设你遍历samples文件夹下的文件,用os.path模块提取纯文件名,再拼接输出路径:

samples_dir = "samples"
# 遍历samples文件夹下的所有文件
for filename in os.listdir(samples_dir):
    # 跳过非目标文件(比如隐藏文件),这里假设你处理的是mp3格式
    if not filename.endswith(".mp3"):
        continue
    
    # 提取不带后缀的纯文件名(比如abc.mp3 -> abc),如果想保留原后缀就用filename即可
    file_base = os.path.splitext(filename)[0]
    
    # 用os.path.join自动处理路径分隔符,避免手动拼接出错
    output_filename = os.path.join(output_dir, f"{file_base}.txt")
    
    # 现在写入文件就不会有路径问题了
    with open(output_filename, "w") as f:
        f.write(features_with_times)  # 你的特征内容

如果用更现代的pathlib(Python3.4+推荐,代码更简洁直观):

from pathlib import Path

samples_dir = Path("samples")
output_dir = Path("mfcc_flwts")
output_dir.mkdir(exist_ok=True)

# 只遍历samples下的mp3文件,支持递归子文件夹的话用rglob
for sample_file in samples_dir.glob("*.mp3"):
    # sample_file.stem是不带后缀的纯文件名,sample_file.name是带后缀的文件名
    output_filename = output_dir / f"{sample_file.stem}.txt"
    
    with open(output_filename, "w") as f:
        f.write(features_with_times)

3. 为什么之前会出错?

你之前的代码大概率是手动拼接字符串,比如:

# 错误示例:手动拼接导致路径粘连
output_prefix = "mfcc_flwts"
sample_path = "samples/abc.mp3"
# 错误拼接:直接把前缀和路径连在一起,变成mfcc_flwtssamples/abc.mp3.txt
wrong_filename = f"{output_prefix}{sample_path}.txt"

这种方式既没处理目录分隔符,也没提取纯文件名,才会出现samples/跑到路径中间的问题。用os.path.join或者pathlib的/运算符,会自动适配不同系统的路径分隔符(Windows用\,Linux/mac用/),彻底避免这类问题。

额外注意点
  • 如果你的样本文件来自子文件夹,用os.walk或者Path.rglob遍历,记得用os.path.basename()或Path.name提取纯文件名。
  • 若需要保留原文件后缀,直接用filename代替file_base即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:35:58