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
相关产品推荐
相关产品推荐

