You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python跨两个模块调用函数参数读取CSV文件报错求解决方案

问题根因汇总
  • 路径拼接错误:跨模块调用时函数内使用相对路径读取CSV,执行入口为frontend模块时,相对路径的基准目录是frontend所在文件夹,无法定位到backend目录下的CSV文件
  • 文件编码不匹配:未指定编码参数,Windows环境默认用gbk编码读取utf-8编码的CSV,会抛出UnicodeDecodeError
  • CSV格式兼容问题:未处理CSV中的空行、特殊分隔符,默认用逗号分隔但实际CSV为制表符/分号分隔,会出现数据解析错乱
  • 资源未正确释放:未用上下文管理器打开文件,读取中途报错会导致文件句柄泄漏,后续重复调用时报IO错误
  • 硬编码路径问题:函数内部写死绝对路径,更换运行环境后路径失效报错
reading_in函数修正方案

原典型错误写法示例

import csv
def reading_in(csv_path):
    f = open(csv_path)
    reader = csv.reader(f)
    data = list(reader)
    f.close()
    return data

修正后代码

import csv
import os
from pathlib import Path

def reading_in(csv_filename: str, base_path: str = None) -> list:
    # 未传入基准路径时自动取当前backend模块所在目录作为路径基准,避免相对路径混乱问题
    if base_path is None:
        base_path = Path(__file__).parent.absolute()
    full_csv_path = os.path.join(base_path, csv_filename)
    # 提前判断文件存在,抛出明确的路径异常便于排查
    if not os.path.exists(full_csv_path):
        raise FileNotFoundError(f"未找到CSV文件:{full_csv_path},请检查文件名是否正确")
    # 上下文管理器自动释放文件资源,指定utf-8编码兼容多系统,newline参数适配csv模块规范
    with open(full_csv_path, mode='r', encoding='utf-8', newline='') as f:
        # 若CSV为分号/制表符分隔,可添加delimiter=';'或delimiter='\t'参数
        reader = csv.reader(f)
        # 过滤空行避免脏数据
        data = [row for row in reader if any(row)]
    return data
frontend模块调用示例
from backend import reading_in
# 直接传入CSV文件名,函数会自动定位backend目录下的目标文件
customer_data = reading_in("customer.csv")
# 若CSV存放在自定义目录,主动传入基准路径即可
# customer_data = reading_in("customer.csv", base_path="/your/custom/data/path")

内容的提问来源于stack exchange,提问作者tim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 10:06:07