0

0

如何正确传递文件路径以避免 FileNotFoundError 错误

心靈之曲

心靈之曲

发布时间:2026-01-12 17:38:02

|

414人浏览过

|

来源于php中文网

原创

如何正确传递文件路径以避免 FileNotFoundError 错误

本文详解在使用 `pandas.read_csv()` 读取目录下多个 csv 文件时,因路径拼接错误导致的 `filenotfounderror` 问题,并提供修复后的完整、健壮的批量清洗脚本。

当你调用 pd.read_csv(file) 且 file 仅为文件名(如 "data.csv")时,pandas 默认会在当前工作目录下查找该文件,而非你指定的输入文件夹。若文件实际位于 ./input/ 下,而你未将路径与文件名正确拼接,就会触发经典的 FileNotFoundError: [Errno 2] No such file or directory 错误。

核心问题在于:必须传入完整的绝对路径或相对于当前工作目录的有效相对路径。推荐使用 os.path.join(input_folder_path, file) 构建安全路径(自动适配不同操作系统的路径分隔符),并确保该路径确实指向一个存在的 .csv 文件。

以下是修复后、逻辑清晰、可直接运行的完整代码:

import os
import pandas as pd

def clean_files(input_folder_path, output_folder_path):
    """
    批量读取、清洗并保存 CSV 文件:
    - 跳过每个文件前5行(如表头/说明行)
    - 保存为 cleaned_{原文件名} 到输出目录
    """
    # 验证输入路径存在且为目录
    if not os.path.isdir(input_folder_path):
        raise ValueError(f"输入路径不存在或不是目录: {input_folder_path}")
    if not os.path.isdir(output_folder_path):
        os.makedirs(output_folder_path)  # 自动创建输出目录

    # 获取所有 CSV 文件名(不含路径)
    csv_files = [f for f in os.listdir(input_folder_path) if f.lower().endswith('.csv')]

    if not csv_files:
        print("警告:输入目录中未找到任何 CSV 文件。")
        return []

    cleaned_dfs = []  # 存储清洗后的 DataFrame 列表

    for filename in csv_files:
        file_path = os.path.join(input_folder_path, filename)

        # ✅ 关键修复:使用完整 file_path 读取
        try:
            df = pd.read_csv(file_path)
            print(f"✓ 已读取: {filename} ({len(df)} 行)")
        except Exception as e:
            print(f"✗ 读取失败 {filename}: {e}")
            continue

        # 清洗:跳过前5行(注意:iloc[5:] 表示从索引5开始,即丢弃第0~4行)
        if len(df) > 5:
            df_cleaned = df.iloc[5:].reset_index(drop=True)
        else:
            print(f"⚠ {filename} 行数不足6行,清洗后为空 DataFrame")
            df_cleaned = pd.DataFrame()

        # 保存清洗后文件
        output_file = os.path.join(output_folder_path, f"cleaned_{filename}")
        try:
            df_cleaned.to_csv(output_file, index=False)
            print(f"✓ 已保存: {output_file}")
        except Exception as e:
            print(f"✗ 保存失败 {output_file}: {e}")
            continue

        cleaned_dfs.append(df_cleaned)

    # 可选:统一显示各 DataFrame 形状(非内容,避免大量输出)
    for i, df in enumerate(cleaned_dfs):
        print(f"cleaned_df[{i}] 形状: {df.shape}")

    return cleaned_dfs

# 使用示例(请根据实际路径调整)
if __name__ == '__main__':
    input_dir = "./input_csv/"   # ✅ 确保此路径存在且含 CSV 文件
    output_dir = "./cleaned_csv/"

    result = clean_files(input_dir, output_dir)
    print(f"\n✅ 总共处理完成 {len(result)} 个 CSV 文件。")

关键修复点与最佳实践总结:

LongCat AI
LongCat AI

美团推出的AI对话问答工具

下载
  • ❌ 错误写法:pd.read_csv(file) → 仅传文件名,路径丢失;
  • ✅ 正确写法:pd.read_csv(os.path.join(input_folder_path, file)) → 显式构造完整路径;
  • ?️ 增加路径存在性校验与异常捕获,避免程序崩溃;
  • ? df.iloc[5:] 是切片操作,非“删除前5行”的通用清洗逻辑(如需按条件过滤,请改用 df.drop() 或布尔索引);
  • ? 输出文件名使用 cleaned_{filename} 保留原始扩展名,避免生成 .csv.csv;
  • ⚠️ 原代码中 cleaned_df = df.append(df) 和重复 append 存在严重逻辑错误(覆盖变量、重复追加),已重构为清晰的列表累积模式。

运行前请确认:

  1. input_folder_path 下有真实 .csv 文件;
  2. 你有对应目录的读写权限;
  3. 当前工作目录(os.getcwd())不影响 os.path.join 的正确性(它始终基于给定路径拼接)。

遵循以上规范,即可彻底规避 FileNotFoundError,实现稳定可靠的批量 CSV 处理。

相关专题

更多
Python 时间序列分析与预测
Python 时间序列分析与预测

本专题专注讲解 Python 在时间序列数据处理与预测建模中的实战技巧,涵盖时间索引处理、周期性与趋势分解、平稳性检测、ARIMA/SARIMA 模型构建、预测误差评估,以及基于实际业务场景的时间序列项目实操,帮助学习者掌握从数据预处理到模型预测的完整时序分析能力。

51

2025.12.04

go语言 数组和切片
go语言 数组和切片

本专题整合了go语言数组和切片的区别与含义,阅读专题下面的文章了解更多详细内容。

46

2025.09.03

append用法
append用法

append是一个常用的命令行工具,用于将一个文件的内容追加到另一个文件的末尾。想了解更多append用法相关内容,可以阅读本专题下面的文章。

343

2023.10.25

python中append的用法
python中append的用法

在Python中,append()是列表对象的一个方法,用于向列表末尾添加一个元素。想了解更多append的更多内容,可以阅读本专题下面的文章。

1070

2023.11.14

python中append的含义
python中append的含义

本专题整合了python中append的相关内容,阅读专题下面的文章了解更多详细内容。

173

2025.09.12

点击input框没有光标怎么办
点击input框没有光标怎么办

点击input框没有光标的解决办法:1、确认输入框焦点;2、清除浏览器缓存;3、更新浏览器;4、使用JavaScript;5、检查硬件设备;6、检查输入框属性;7、调试JavaScript代码;8、检查页面其他元素;9、考虑浏览器兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

180

2023.11.24

Java 项目构建与依赖管理(Maven / Gradle)
Java 项目构建与依赖管理(Maven / Gradle)

本专题系统讲解 Java 项目构建与依赖管理的完整体系,重点覆盖 Maven 与 Gradle 的核心概念、项目生命周期、依赖冲突解决、多模块项目管理、构建加速与版本发布规范。通过真实项目结构示例,帮助学习者掌握 从零搭建、维护到发布 Java 工程的标准化流程,提升在实际团队开发中的工程能力与协作效率。

10

2026.01.12

c++主流开发框架汇总
c++主流开发框架汇总

本专题整合了c++开发框架推荐,阅读专题下面的文章了解更多详细内容。

102

2026.01.09

c++框架学习教程汇总
c++框架学习教程汇总

本专题整合了c++框架学习教程汇总,阅读专题下面的文章了解更多详细内容。

60

2026.01.09

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Rust 教程
Rust 教程

共28课时 | 4.3万人学习

PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7万人学习

Git 教程
Git 教程

共21课时 | 2.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号