<think>这个错误是因为Python在指定的路径下找不到名为“附件1.xlsx”的文件。用户提供的代码中,文件路径是相对路径(只有文件名),但该文件可能不在当前工作目录中,或者文件名不正确(比如有空格或特殊字符)。解决方法是使用绝对路径,或者确保文件位于当前工作目录下,并且文件名完全匹配(包括扩展名)。
我们可以通过以下步骤来解决:
1. 确认文件“附件1.xlsx”是否在代码运行的当前工作目录下。如果不在,需要提供完整路径。
2. 检查文件名是否完全匹配,包括大小写和扩展名(例如,有些系统上可能实际是.xls而不是.xlsx)。
为了确保代码的健壮性,我们可以添加一些检查:
- 在尝试读取文件之前,先检查文件是否存在。
- 使用绝对路径,避免相对路径带来的歧义。
修改后的代码(文件存在性检查)如下:
但是,由于用户已经指定了文件路径,但该文件不存在于当前目录,所以我们需要用户提供正确的路径。
然而,根据错误信息,用户之前的代码中使用了绝对路径(如:r"C:\Users\LENOVO\Desktop\2026金地杯\2026金地杯\2026_A题\附件2.xlsx"),但在新代码中却变成了相对路径"附件1.xlsx"。这可能是用户修改代码时遗漏了路径。
因此,我建议将文件路径改回使用绝对路径,并确保该路径下存在附件1.xlsx。
但是,由于用户没有提供附件1.xlsx的具体位置,我假设它和附件2.xlsx在同一目录下。因此,我们可以将路径改为:
file_path = r"C:\Users\LENOVO\Desktop\2026金地杯\2026金地杯\2026_A题\附件1.xlsx"
但是,请注意,用户之前读取的是“附件2.xlsx”,现在需要读取的是“附件1.xlsx”,所以文件名不同。
修改后的代码开头部分:
```python
file_path = r"C:\Users\LENOVO\Desktop\2026金地杯\2026金地杯\2026_A题\附件1.xlsx"
# 方式1(4Hz)
df1 = pd.read_excel(file_path, sheet_name="方式1(4Hz)")
t1 = df1.iloc[:, 0].values
x1 = df1.iloc[:, 1].values
y1 = df1.iloc[:, 2].values
# 方式2(5Hz)
df2 = pd.read_excel(file_path, sheet_name="方式2(5Hz)")
t2 = df2.iloc[:, 0].values
x2 = df2.iloc[:, 1].values
y2 = df2.iloc[:, 2].values
```
如果文件路径正确,那么问题应该解决。
另外,如果文件路径中有中文,请确保Python环境支持中文字符集(通常没有问题,因为错误信息中显示路径是中文的,且之前的代码成功运行过)。
如果用户不确定文件路径,可以使用以下代码来检查当前工作目录:
```python
import os
print(os.getcwd())
```
然后,将文件放在打印出的目录下,或者修改文件路径。
因此,修正后的完整代码(仅修改文件路径部分)如下:
但是,由于用户之前的代码中使用了绝对路径,我建议使用绝对路径,并确保文件名正确。
如果用户仍然遇到问题,可以添加文件存在检查:
```python
import os
file_path = r"C:\Users\LENOVO\Desktop\2026金地杯\2026金地杯\2026_A题\附件1.xlsx"
if not os.path.exists(file_path):
raise FileNotFoundError(f"文件 {file_path} 不存在!")
# 然后继续读取...
```
这样可以在文件不存在时给出明确的错误信息。
综上所述,我们将文件路径设置为绝对路径,并添加存在性检查。
但是,由于错误已经明确是文件不存在,所以首要任务是确保文件路径正确。
现在,我们假设用户已经将文件路径修正为正确的绝对路径,那么代码应该可以运行。
如果用户希望代码更具可移植性,可以考虑使用相对路径,但需要确保当前工作目录正确。
由于问题只涉及文件路径,其他代码逻辑在之前的问题中已经分析过,这里不再重复。
因此,修正后的代码开头部分如下:
</think>
这个错误表明 Python 无法找到你指定的 Excel 文件 "附件1.xlsx"。这是一个常见的文件路径问题,让我们来解决它:
### 🔍 问题分析
错误信息的关键部分:
```
FileNotFoundError: [Errno 2] No such file or directory: '附件1.xlsx'
```
这意味着:
1. Python 在当前工作目录找不到 "附件1.xlsx" 文件
2. 文件路径不正确或文件不存在
3. 文件名大小写不匹配(Windows 系统不区分大小写,但 macOS/Linux 区分)
4. 文件扩展名不匹配(如实际是 .xls 而非 .xlsx)
### ✅ 解决方案
以下是修正后的代码,包含更健壮的文件路径处理:
```python
import os
import pandas as pd
from scipy import interpolate
import numpy as np
from scipy.optimize import minimize_scalar
import matplotlib.pyplot as plt
# --------------------- 1. 健壮的文件路径处理 ---------------------
# 方法1:使用绝对路径(推荐)
# file_path = r"C:\完整路径\到\你的\文件夹\附件1.xlsx"
# 方法2:动态检测文件位置(更灵活)
current_dir = os.path.dirname(os.path.abspath(__file__)) # 获取当前脚本所在目录
file_path = os.path.join(current_dir, "附件1.xlsx")
# 检查文件是否存在
if not os.path.exists(file_path):
# 尝试常见文件名变体
possible_files = [
"附件1.xlsx",
"附件1.XLSX",
"附件1.xls",
"附件1.XLS",
"Attachment1.xlsx",
"数据1.xlsx"
]
found = False
for filename in possible_files:
test_path = os.path.join(current_dir, filename)
if os.path.exists(test_path):
file_path = test_path
print(f"✅ 找到文件: {file_path}")
found = True
break
if not found:
# 列出当前目录所有文件帮助用户定位
print("❌ 错误: 找不到附件1.xlsx")
print("当前目录内容:")
for f in os.listdir(current_dir):
print(f" - {f}")
raise FileNotFoundError(f"请将附件1.xlsx放在: {current_dir}")
print(f"📂 使用文件: {file_path}")
# --------------------- 2. 读取Excel数据(添加异常处理)-------------------
try:
# 方式1(4Hz)
df1 = pd.read_excel(file_path, sheet_name="方式1(4Hz)")
t1 = df1.iloc[:, 0].values
x1 = df1.iloc[:, 1].values
y1 = df1.iloc[:, 2].values
# 方式2(5Hz)
df2 = pd.read_excel(file_path, sheet_name="方式2(5Hz)")
t2 = df2.iloc[:, 0].values
x2 = df2.iloc[:, 1].values
y2 = df2.iloc[:, 2].values
except Exception as e:
print(f"❌ 读取Excel失败: {str(e)}")
print("尝试的sheet名称: '方式1(4Hz)' 和 '方式2(5Hz)'")
# 列出所有sheet名称帮助用户
xl = pd.ExcelFile(file_path)
print("可用sheet名称:")
for sheet in xl.sheet_names:
print(f" - '{sheet}'")
raise
# --------------------- 3. 数据完整性检查 ---------------------
print("\n🔍 数据完整性检查:")
print(f"方式1数据点: {len(t1)}")
print(f"方式2数据点: {len(t2)}")
print(f"方式1时间范围: {t1.min():.2f} → {t1.max():.2f} s")
print(f"方式2时间范围: {t2.min():.2f} → {t2.max():.2f} s")
# 检查数据是否包含NaN
if np.isnan(x1).any() or np.isnan(y1).any():
print("⚠️ 方式1数据包含缺失值!")
if np.isnan(x2).any() or np.isnan(y2).any():
print("⚠️ 方式2数据包含缺失值!")
# ... 其余代码保持不变(时间对齐和轨迹融合部分)...
```
### 📝 关键改进说明
1. **动态文件路径处理**:
- 使用 `os.path.dirname(os.path.abspath(__file__))` 获取脚本所在目录
- 自动尝试常见文件名变体(大小写、扩展名等)
2. **详细的错误诊断**:
- 文件不存在时列出目录内容
- 读取失败时显示所有可用 sheet 名称
- 数据完整性检查(时间范围、缺失值)
3. **异常处理机制**:
- 使用 try-except 捕获可能的读取异常
- 提供具体的错误信息指导用户修复
4. **数据验证**:
- 检查数据点数量
- 验证时间范围合理性
- 检测缺失值(NaN)
### ⚠️ 常见问题排查指南
如果修正后仍报错,请检查:
1. **文件实际位置**:
```python
print(f"当前工作目录: {os.getcwd()}")
print(f"脚本所在目录: {os.path.dirname(os.path.abspath(__file__))}")
```
2. **文件权限问题**(特别是Windows):
- 右键文件 → 属性 → 检查是否被锁定
- 尝试将文件复制到新位置
3. **Excel文件格式**:
- 确保不是CSV文件(扩展名伪装)
- 尝试用Excel打开确认文件未损坏
4. **中文路径问题**:
```python
# 在代码开头添加UTF-8编码声明
# -*- coding: utf-8 -*-
```
5. **依赖库版本**:
```bash
pip install --upgrade pandas openpyxl xlrd
```
### 💡 建议的最佳实践
1. **使用绝对路径**:
```python
file_path = r"C:\Users\你的用户名\Desktop\项目文件夹\附件1.xlsx"
```
2. **路径常量集中管理**:
```python
# config.py
DATA_DIR = r"C:\project\data"
# main.py
from config import DATA_DIR
file_path = os.path.join(DATA_DIR, "附件1.xlsx")
```
3. **添加单元测试**:
```python
def test_file_exists():
assert os.path.exists(file_path), f"文件不存在: {file_path}"
def test_sheets_exist():
xl = pd.ExcelFile(file_path)
assert "方式1(4Hz)" in xl.sheet_names, "缺少sheet: 方式1(4Hz)"
```