当前位置:首页>python>Python处理文件报错“找不到数据文件或数据文件不存在”的常见处理

Python处理文件报错“找不到数据文件或数据文件不存在”的常见处理

  • 2026-10-11 08:10:35
Python处理文件报错“找不到数据文件或数据文件不存在”的常见处理

1️⃣ 为什么会报 “数据文件不存在”

可能的原因
解释
解决办法(对应下面的步骤)
路径写错了
① 目录层级不对 ② 文件名有多余空格、隐藏字符 ③ 后缀不是 .xlsx 而是 .xls
✅ Step 1‑Step 3
字符串转义错误
Windows 路径里用了 \,如果没有加 原始字符串(r'')或把 \ 写成 \\,\b、\P … 这些会被解释成 转义序列,导致实际路径被破坏
✅ Step 5
文件正在被占用 / 权限不足
Excel 打开了文件、或者当前用户没有读权限
✅ Step 4(检查是否被占用)
脚本运行的工作目录不在项目根目录
脚本里用了相对路径(data/...),而实际 cwd 不是项目根目录
✅ Step 6(改为绝对/原始路径或把 cwd 设对)

2️⃣ Step‑by‑step 检查 & 修复

⚡ 推荐先把文件改成一个简短、全英文的名字(比如 sample.xlsx),这样可以避免中文字符在某些旧版编辑器或终端里出现编码错误。改名后记得把脚本里的路径也改成新名字。

Step 1:确认文件真的在该位置

打开 命令行(PowerShell / CMD)并执行:

# 把下面这行完整粘进去(双引号里是你的绝对路径)(Get-Item "路径\文件名").FullName
返回完整路径,说明文件在那儿。
  • 若报错 Cannot find path,说明路径写错或文件不在此处。

小技巧:在文件资源管理器里把文件拖到 PowerShell 窗口,系统会自动把完整路径粘进去,确保没有手动打错。

Step 2:检查文件名的“看不见的字符”

在 PowerShell 中运行:

# 列出文件名的十进制 Unicode 编码(可以看到是否有额外空格或不可见字符)(Get-ChildItem "路径" |   Where-Object { $_.Name -match "任一字段" }).Name |   ForEach-Object {       $chars = $_.ToCharArray() | ForEach-Object { [int][char]$_ }       Write-Host "$_  ->  $chars"   }
如果看到的字符列表里出现 32(空格)或者 65279(BOM/零宽字符),请把文件 重命名 为不带这些字符的名字。

Step 3:确认文件后缀

PowerShell 可以直接告诉你真实后缀:

(Get-Item "路径\文件名").Extension
  • 返回.xlsx → 正确
  • 返回 .xls、.csv、甚至空字符串 → 把脚本里的后缀改成相应的 '.xls' 或 '.csv',或者把文件另存为 .xlsx。

Step 4:检查是否被 Excel 锁定

    把文件 全部关闭(包括后台可能的 “Excel 自动保存”),然后再跑一次脚本。如果仍然报 FileNotFoundError,说明不是锁定导致的(锁定会报 PermissionError)。

Step 5:把路径写成 原始字符串 或 正斜杠(防止转义)

在 data_preparation.py 中,把 DEFAULT_DATA_PATH 改成下面任意一种写法(两者等价):

# ① 原始字符串(推荐)DEFAULT_DATA_PATH =r'路径\文件名'# ② 正斜杠写法(Windows 也能识别)DEFAULT_DATA_PATH = '路径/文件名'
为什么要这么写?\ 在普通 Python 字符串里是转义符。r'' 告诉解释器 “不要把里面的 \ 当转义字符”,从而得到完整路径。

Step 6:确保脚本使用 绝对路径(防止工作目录错误)

我们在脚本里加一点调试信息,这样即使以后路径错了,你也能第一眼看出到底在找哪儿:

def _load_data(self, path: str) -> pd.DataFrame:    """加载数据文件——带调试输出"""    p = Path(path)    # ------------------- 调试信息 -------------------    print("\n🔎 正在检查文件路径 ...")    print(f"   传入的路径        : {path}")    print(f"   解析后 Path 对象 : {p}")    print(f"   绝对路径          : {p.resolve()}")    print(f"   父目录内容        : {[f.name for f in p.parent.iterdir()]}")    # ------------------------------------------------    if not p.exists():        raise FileNotFoundError(f"❌ 数据文件不存在: {p.resolve()}")

最新文章

随机文章