浏览文件位置

时间:2013-05-12 02:53:18

标签: python file-io

我目前在个人python项目的目录中有几个文件夹。文件夹是模块和资源。我正在编写一个python文件,它将驻留在modules文件夹中,但需要访问resources文件夹中的文件。

我以这种方式组织我的项目的原因是我计划为我将要制作的类提供一堆单独的.py文件。然后在根目录中,我将有我的主脚本,它将在需要时从类中导入。

旁注:我的项目是一个python脚本,通过使用滚动和记录信息,滚动骰子将变得有趣1000倍。

- 编辑 -

我不确定如果我很清楚,但我需要知道modules文件夹中的some-file.py如何从resources文件夹中的some-other-file.txt中读取。我无法将该位置硬编码为“C:/ rootFolder / resources”,因为我打算与朋友分享(另外我不能保证它将始终保留在我自己的系统上的相同位置)。

2 个答案:

答案 0 :(得分:2)

您可以将包含modulesresources文件夹的目录路径添加到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

              ...

或者您可以使用sysmore info here

将目录添加到PATH
import sys
sys.path.append("C:/resources")