在 python 包中使用 python 以外的文件

Using other than python files in a python package

我的 python 项目中有以下文件结构。 file structure

正如您在文件结构中看到的,SuperMarket 是我制作的一个 python 包。 问题是我无法在 package.For 示例中的任何 python 文件中使用数据文件目录中的任何文本文件, 以下是brands.py

里面的一段代码
class Brands:
    def getBrandsData(self, b_id=False, name=False):
        """:returns a list containing all brand data based on parameters"""
        data = []
        with open('dataFiles/brands.txt', '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

当我从 main.py 调用函数时,出现以下运行时错误。

with open('dataFiles/brands.txt', 'r') as file:
FileNotFoundError: [Errno 2] No such file or directory: 'dataFiles/brands.txt'

我可以对我的程序做些什么修改来克服这个问题。 我对这种问题很陌生 python packages.Can 有人帮我解决这个问题吗?

试试这个?

class Brands:
    def getBrandsData(self, b_id=False, name=False):
        """:returns a list containing all brand data based on parameters"""
        data = []
        with open("/dataFiles/brands.txt", '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

我不太确定,但我认为它可能有效 *我没有正确的文件结构所以我不知道,这是我最好的猜测

如果您的文件在当前目录中,则只需在 open() 函数中使用文件名即可。

如果您的文件在子目录或任何其他目录中,则指定文件的完整路径 这是一个例子

f = open("brands.txt") # 打开当前目录下的文件

f = open("/full/path/to/brands.txt") # 指定完整路径

在代码的顶部,您可以键入。

import turtle

或者你想插入的任何内容 查看此网站以查看所有包:https://www.python-course.eu/python3_packages.php

到目前为止,我尝试了很多次,我得到了这个可行的答案。 我的理解是,即使我们创建的包不是 python 文件,我们也应该指定根文件夹的相对路径。所以在我的问题中,修改后的代码片段是

class Brands:
    def getBrandsData(self, b_id=False, name=False):
        """:returns a list containing all brand data based on parameters"""
        data = []
        with open("SuperMarket/dataFiles/brands.txt", '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