FileNotFoundError排查:文件存在但Python无法识别路径问题
解决FileNotFoundError:文件存在但Python读不到
问题代码
def extract_features(file_path): sr, y = wavfile.read(file_path) mfccs = librosa.feature.mfcc(y=y, sr=sr, n_mfcc=40) return mfccs features = [] labels = [] for i, row in data.iterrows(): file_path = os.path.join(data_dir, row[0]) repr(file_path) transcription = row[1] feature = extract_features(file_path) features.append(feature) labels.append(transcription)
报错信息
File "c:\Users\Adyatoni\OneDrive\Desktop\PROGRAMS\Beng tts 2", line 31, in <module> feature = extract_features(file_path) #The resulting feature matrix is stored in the feature variable. File "c:\Users\Adyatoni\OneDrive\Desktop\PROGRAMS\Beng tts 2", line 19, in extract_features sr, y = wavfile.read(file_path) File "C:\Users\Adyatoni\AppData\Local\Programs\Python\Python310\lib\site-packages\scipy\io\wavfile.py", line 647, in read fid = open(filename, 'rb') FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\Adyatoni\\OneDrive\\Desktop\\PROGRAMS\\Bengali tts audio\\ bin_0834_0030520634.wav'
问题情况
文件确实在报错的路径里,但Python就是无法识别。已经试过打印file_path,显示的路径和报错里的一致;尝试用librosa替代wavfile提取特征也没解决,但这个路径在其他程序里能正常使用。
解决办法
1. 清理文件名的多余空格
看报错路径,bin_0834_0030520634.wav前面多了一个空格,大概率是row[0]里的文件名开头带了空格,拼接路径时去掉首尾空格即可:
file_path = os.path.join(data_dir, row[0].strip())
2. 提前校验路径合法性
在调用提取函数前加个判断,确认路径真实存在,方便快速定位问题:
file_path = os.path.join(data_dir, row[0].strip()) if not os.path.exists(file_path): print(f"找不到该路径:{file_path}") continue feature = extract_features(file_path)
3. 处理OneDrive的同步/权限问题
OneDrive路径容易出现同步延迟或权限限制,试试这些操作:
- 等待OneDrive完全同步,确保文件不是“正在同步”状态
- 把音频文件复制到本地非OneDrive目录,再测试读取
- 以管理员身份运行Python脚本,避免权限不足
4. 彻底替换为librosa读取
既然其他程序能识别路径,直接用librosa替代scipy的wavfile,注意两者返回值顺序相反:
def extract_features(file_path): y, sr = librosa.load(file_path) # librosa返回顺序是y在前、sr在后,和wavfile相反 mfccs = librosa.feature.mfcc(y=y, sr=sr, n_mfcc=40) return mfccs
内容的提问来源于stack exchange,提问作者Adyatoni Biswas
相关产品推荐
相关产品推荐

