我的项目文件夹的结构如下:
* project1/
* data/
* results.csv
* documentation/
* programs/
* analysis.py
相对于analysis.py
文件夹(这是项目的根文件夹),results.csv
将如何访问project1
?
我知道这是很多人问过并回答过的问题。它涉及诸如__init__.py
之类的事情,并在您声明settings.py
的根目录中建立ROOT_DIR = os.path.dirname(os.path.abspath(__file__))
文件。但是,我永远无法使这些东西正常工作,并且感觉好像缺少了明显的东西。
请原谅我是一个Python新手,只是无法使它正常工作。
如果有人能通过一个非常清晰的例子说明他们如何从事这项工作,我将非常感激。
答案 0 :(得分:1)
如果答案是results.py
,并且问题是“如何从此处导入”,那么问题将是不同的答案,但是“如何加载”是非常简单的。
请记住,__file__
是从您的curdir到将在其中执行的python文件的相对路径。这使我们可以通过两种方式计算路径:一种使用现代的pathlib
stdlib库,另一种使用os
命令。
# using pathlib
from pathlib import Path
thisfile = Path(__file__)
programs = thisfile.parent
project1 = programs.parent
data = project1 / 'data' # yep, we're dividing by a string. pathlib is awesome
resultscsv = data / 'results.csv'
# or
resultscsv = Path(__file__).parent.parent / 'data' / 'results.csv'
# using os
import os.path
thisfile = os.path.abspath(__file__)
programs = os.path.dirname(thisfile)
project1 = os.path.dirname(programs)
data = os.path.join(project1, 'data')
resultscsv = os.path.join(data, 'results.csv')
# or
resultscsv = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), 'data', 'results.csv')
# or POSSIBLY, but this might not work in all places
resultscsv = os.path.join(__file__, '..', '..', 'data', 'results.csv')
pathlib方法对我来说似乎更具可读性,并且加上打开该文件变为:
with resultscsv.open(mode='r') as f:
...
而不是(稍微)更加钝化
with open(resultscsv, mode='r') as f:
...