在Python中查找与项目根目录相关的文件

时间:2019-05-14 02:32:43

标签: python

我的项目文件夹的结构如下:

* 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新手,只是无法使它正常工作。

如果有人能通过一个非常清晰的例子说明他们如何从事这项工作,我将非常感激。

1 个答案:

答案 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:
    ...