我目前在个人python项目的目录中有几个文件夹。文件夹是模块和资源。我正在编写一个python文件,它将驻留在modules文件夹中,但需要访问resources文件夹中的文件。
我以这种方式组织我的项目的原因是我计划为我将要制作的类提供一堆单独的.py文件。然后在根目录中,我将有我的主脚本,它将在需要时从类中导入。
旁注:我的项目是一个python脚本,通过使用滚动和记录信息,滚动骰子将变得有趣1000倍。
- 编辑 -
我不确定如果我很清楚,但我需要知道modules文件夹中的some-file.py如何从resources文件夹中的some-other-file.txt中读取。我无法将该位置硬编码为“C:/ rootFolder / resources”,因为我打算与朋友分享(另外我不能保证它将始终保留在我自己的系统上的相同位置)。
答案 0 :(得分:2)
您可以将包含modules
和resources
文件夹的目录路径添加到system path
(sys.path)或PYTHONPATH
并同时转为modules
通过添加resources
文件将__init__.py
目录添加到packages。
现在访问这些模块只需导入它们:
import modules
from modules import some_module
import modules.some_module
修改强>
要从模块文件夹中的文件中读取资源文件夹中的txt,请使用相对路径:
with open("../resources/file.txt") as f:
#do something with file
..
表示当前文件夹的父文件夹。
如果您当前的工作目录不是模块,请使用:
import os
cwd = os.path.dirname(os.path.realpath(__file__)) #path to current file
par_dir = os.path.split(cwd)[0] #path to parent directory
my_file = os.path.join(par_dir,"resources/file.txt") #path to file in resources dir
with open(myfile) as f:
#do something
答案 1 :(得分:0)
您可以使用几种不同的方式,使用空的__init__.py
文件来指示它是模块目录(from here):
sound/ Top-level package
__init__.py Initialize the sound package
modules/ Subpackage for file format conversions
__init__.py
onefile.py
auwrite.py
...
resources/ Subpackage for sound effects
__init__.py
another.py
...
filters/ Subpackage for filters
__init__.py
equalizer.py
vocoder.py
...
或者您可以使用sys
(more info here)
import sys
sys.path.append("C:/resources")