我们假设我有一个文件夹x
,其中包含两个文件夹foo
和bar
。在foo
里面我有一个Python脚本,在bar
里面,我有我的数据(让我们说几个.txt
个文件)。现在,从我的脚本中,我想访问我的数据。我可以简单地使用这个命令并在一天之内调用它:
fileList = glob.glob('/absolute/path/to/bar/*.txt')
但是,使用此方法,如果移动x
文件夹,我的脚本就会中断。
以相对方式指定路径的最简单方法是什么,允许我自由地在父文件夹x
中移动?
答案 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文件中。
两种解决方案都能很好地适用于所有情况。