以非绝对方式指定兄弟文件夹的路径

时间:2015-10-30 17:26:30

标签: python

我们假设我有一个文件夹x,其中包含两个文件夹foobar。在foo里面我有一个Python脚本,在bar里面,我有我的数据(让我们说几个.txt个文件)。现在,从我的脚本中,我想访问我的数据。我可以简单地使用这个命令并在一天之内调用它:

fileList = glob.glob('/absolute/path/to/bar/*.txt')

但是,使用此方法,如果移动x文件夹,我的脚本就会中断。

以相对方式指定路径的最简单方法是什么,允许我自由地在父文件夹x中移动?

2 个答案:

答案 0 :(得分:4)

../指定您的父目录,因此../bar/*.txt

就像John Gordon所说的那样,假设您在x/foo/内并从那里运行脚本,这就有效。

如果您没有从自己的目录中执行脚本,则需要找出脚本当前的位置。这不是微不足道的。 felipsmartins'使用os.path.dirname(os.path.dirname(__file__))的解决方案通常很好,但在所有情况下都不起作用。参见例如在这里:How to properly determine current script directory in Python?

答案 1 :(得分:2)

我认为__file__是一个不错的方法:

import glob
import os

# "x" folder
base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))   
files = glob.glob(os.path.join(base_dir, 'bar', '*.txt'))

从顶级目录开始工作要容易得多。 Django和其他框架does也是如此 此外,它还解决了从命令行和不同位置调用脚本时的问题。

另一个approch正在使用os.chdir(),更改工作目录:

import glob
import os

# same that: cd /absolute path/for/x folder
os.chdir(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

files = glob.glob(os.path.join('bar', '*.txt'))

Zend Framework(PHP)uses上面的方法在bootstrap文件中。

两种解决方案都能很好地适用于所有情况。