在 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
我的 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