Azure服务器Ubuntu系统下文件存在却报ENOENT/FileNotFoundError求助
解决Ubuntu服务器上创建的WAV文件下载及Python加载报错问题
可能的原因及对应解决方案
1. 符号链接有效性问题
你的代码用os.symlink创建的是软链接,而非实际文件。如果链接指向的源文件不存在,或者链接路径有误,就会触发找不到文件的错误。
- 登录服务器,执行以下命令检查软链接状态:
查看输出里软链接的目标路径是否存在(无效链接通常显示红色或标注ls -l /mnt/hdd1/AMT/corpus/MAESTRO/wav/ ls -l /mnt/hdd1/AMT/corpus/MAESTRO/midi/broken)。 - 确保输出目录的
wav和midi子目录已提前创建——代码没有目录创建逻辑,若目录不存在会直接导致链接创建失败:mkdir -p /mnt/hdd1/AMT/corpus/MAESTRO/{wav,midi}
2. VS远程下载未解析软链接
VS默认可能只下载软链接文件本身,而非链接指向的实际音频文件,导致本地无对应内容。
- 打开VS设置,搜索
remote.fileDownload.resolveSymlinks,将其设为true,这样下载时会自动解析软链接,获取实际文件。 - 或者修改Python代码,直接复制实际文件而非创建软链接(需导入
shutil模块):#! python import os import sys import argparse import shutil # 新增导入 if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('-d_i', help='MAESTRO原始语料目录(输入)', default='/mnt/hdd1/AMT/corpus/MAESTRO/MAESTRO') parser.add_argument('-d_o', help='MAESTRO重命名后语料目录(输出)', default='/mnt/hdd1/AMT/corpus/MAESTRO') parser.add_argument('-d_list', help='语料列表目录') args = parser.parse_args() print('** 重命名MAESTRO wav/mid文件 **') a_attribute = ['train', 'valid', 'test'] # 提前创建输出子目录,不存在则创建 os.makedirs(args.d_o.rstrip('/')+'/wav/', exist_ok=True) os.makedirs(args.d_o.rstrip('/')+'/midi/', exist_ok=True) for attribute in a_attribute: with open(args.d_list.rstrip('/')+'/'+attribute+'.tsv', 'r', encoding='utf-8') as f: a_in = f.readlines() for i in range(1, len(a_in)): fname_wav = a_in[i].rstrip('\n').split('\t')[5] fname_mid = a_in[i].rstrip('\n').split('\t')[4] number = a_in[i].rstrip('\n').split('\t')[7] src_wav = args.d_i.rstrip('/')+'/'+fname_wav dst_wav = args.d_o.rstrip('/')+'/wav/'+attribute+'_'+number+'.wav' src_mid = args.d_i.rstrip('/')+'/'+fname_mid dst_mid = args.d_o.rstrip('/')+'/midi/'+attribute+'_'+number+'.mid' # 复制文件而非创建链接 shutil.copyfile(src_wav, dst_wav) shutil.copyfile(src_mid, dst_mid) print('** 完成 **')
3. 路径或编码异常
- 检查TSV文件中是否存在不可见字符或特殊字符:
确认每行分隔符是制表符,文件名没有空格、非ASCII字符等可能导致路径解析错误的内容。cat -A /path/to/your/list/directory/train.tsv - 在代码中添加路径验证日志,确认源文件和目标路径的正确性:
# 在创建链接/复制文件前添加 src_wav = args.d_i.rstrip('/')+'/'+fname_wav if not os.path.exists(src_wav): print(f"警告:源文件不存在 {src_wav}") continue print(f"处理文件:{src_wav} -> {dst_wav}")
4. 文件权限问题
确保服务器上的源WAV/MIDI文件有可读权限,否则VS下载或Python加载时会因权限不足触发类似“文件不存在”的错误:
chmod +r /mnt/hdd1/AMT/corpus/MAESTRO/MAESTRO/**/*.wav chmod +r /mnt/hdd1/AMT/corpus/MAESTRO/MAESTRO/**/*.mid
内容的提问来源于stack exchange,提问作者Phys
相关产品推荐
相关产品推荐

