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

Python包内引用非Python文件触发FileNotFoundError如何解决?

问题原因

你使用的是相对于当前工作目录的相对路径,当你从项目根目录运行main.py时,Python的工作目录是main.py所在的根目录,相对路径dataFiles/brands.txt会被解析为[根目录]/dataFiles/brands.txt,但文件实际存放在SuperMarket包目录下,因此触发文件不存在报错。

修复方案

通过当前Python文件的内置变量__file__定位目标文件的绝对路径,步骤如下:

  • 第一步:在brands.py文件开头导入依赖模块
import os
import csv # 若原有代码已经导入csv可忽略这行
  • 第二步:修改文件打开的路径拼接逻辑,修改后的完整代码如下:
class Brands:
    def getBrandsData(self, b_id=False, name=False):
        """:returns a list containing all brand data based on parameters"""
        data = []
        # 计算brands.txt的绝对路径
        current_dir = os.path.dirname(os.path.abspath(__file__))
        brands_file_path = os.path.join(current_dir, 'dataFiles', 'brands.txt')
        with open(brands_file_path, 'r') as file:
            reader = csv.reader(file, delimiter='|')
            for row in reader:
                subData = []
                if b_id:
                    subData.append(row[0])
                if name:
                    subData.append(row[1])
                data.append(subData)
        if [b_id, name].count(True) == 1:
            data = [item for sublist in data for item in sublist]
        return data
Python3.4+可选简化方案

使用pathlib模块实现更简洁的路径拼接:

from pathlib import Path
import csv

class Brands:
    def getBrandsData(self, b_id=False, name=False):
        """:returns a list containing all brand data based on parameters"""
        data = []
        brands_file_path = Path(__file__).parent / 'dataFiles' / 'brands.txt'
        with open(brands_file_path, 'r') as file:
            reader = csv.reader(file, delimiter='|')
            for row in reader:
                subData = []
                if b_id:
                    subData.append(row[0])
                if name:
                    subData.append(row[1])
                data.append(subData)
        if [b_id, name].count(True) == 1:
            data = [item for sublist in data for item in sublist]
        return data

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 02:27:03