Python访问项目根目录

问题描述 投票:0回答:3

我的应用程序的文件夹结构如下:

rootfolder
          /subfolder1/
          /subfolder2
          /subfolder3/test.py

我的代码位于子文件夹3中。但我想将代码的输出写入

subfolder1

script_dir = os.path.dirname(__file__)

full_path = os.path.join(script_dir,'/subfolder1/')

我想知道如何在不导入目录完整路径的情况下执行此操作。

python
3个回答
12
投票

听起来你想要类似的东西

project_root = os.path.dirname(os.path.dirname(__file__))
output_path = os.path.join(project_root, 'subfolder1')

project_root
设置为脚本的父文件夹above,与您的描述相匹配。然后输出文件夹转到该文件夹下的
subfolder1

我还将我的导入改写为

from os.path import dirname, join

这会将您的代码缩短为

project_root = dirname(dirname(__file__))
output_path = join(project_root, 'subfolder1')

我发现这个版本更容易阅读。


0
投票

sys.path
返回项目的所有相关路径。

sys.path
的第一项是正在执行的文件的路径。第二个条目是ether项目的根路径,或者与python本身相关的路径,'IF'正在执行的文件在项目的根路径中。

import sys
for index, path in enumerate(sys.path):
    print(f'{index:02}: {path}')

Returns:'
00: C:\Users\username\Python\Scrapper\library
01: C:\Users\username\Python\Scrapper
02: C:\Users\username\AppData\Local\Programs\Python\Python312\python312.zip
03: C:\Users\username\AppData\Local\Programs\Python\Python312\DLLs
04: C:\Users\username\AppData\Local\Programs\Python\Python312\Lib
05: C:\Users\username\AppData\Local\Programs\Python\Python312
06: C:\Users\username\Python\Scrapper\venv
07: C:\Users\username\Python\Scrapper\venv\Lib\site-packages
08: C:\Users\username\AppData\Local\Programs\Python\Python312\Lib\site-packages
09: C:\Users\username\Python\phpjunkie\phpjunkie
10: C:\Users\username\AppData\Local\Programs\Python\Python312\Lib\site-packages\win32
11: C:\Users\username\AppData\Local\Programs\Python\Python312\Lib\site-packages\win32\lib
12: C:\Users\username\AppData\Local\Programs\Python\Python312\Lib\site-packages\Pythonwin
'

以下函数将返回项目的根路径。

def abs_path(_path: str = ''):
    from sys import path
    from os import sep

    if len(_path):
        _path = _path.replace('/', sep)
        if not _path.startswith(sep):
            _path = sep + _path

    if path[1] in path[0]:
        return path[1] + _path
    else:
        return path[0] + _path


print(__file__)
print(abs_path())
print(abs_path(r'config\urls.txt'))

Returns:'
C:\Users\phpjunkie\Python\Scrapper\folder\folder\folder\path.py
C:\Users\phpjunkie\Python\Scrapper
C:\Users\phpjunkie\Python\Scrapper\config\urls.txt
'

-2
投票

完成此任务的最佳方法是将您的项目变成一个模块。 Python 使用

__init__.py
文件来识别此设置。 所以我们可以简单地在根目录创建一个空的
__init__.py
文件。 结构如下:

rootfolder
          /subfolder1/
          /subfolder2
          /subfolder3/test.py
          __init__.py

完成后,您可以引用任何子文件夹,如下所示:

subfolder1/output.txt

因此,您的脚本将如下所示:

f = open("subfolder1/output.txt", "w+")
f.write("works!")
f.close()
© www.soinside.com 2019 - 2024. All rights reserved.