1

我有一个这样的目录结构:

--bin/
--lib/
--data/

所以基本上,可执行脚本在 bin 中,它调用 lib 中的文件。但 lib 必须与 data 中的文本文件进行通信

通常这用于工作:读取文件通常我用来执行此操作

file_path =  os.path.join(os.path.dirname(__file__))+ "/../" +"data/"+filename
f = open(file_path,"r")

但是,在这种情况下,如果我这样做:

  print os.path.join(os.path.dirname(__file__))
  returns nothing?

我在做什么错..谢谢

4

3 回答 3

4

我猜的意思是空字符串?这只能是这种情况,如果__file__首先是一个空字符串。你不小心覆盖了__file__吗?

于 2012-06-08T17:41:21.000 回答
3

除了其他评论之外,还有一条评论......重点os.path.join是避免类似的事情

mypath=dir + '/' + subdir + '/'+filename

这是使用更干净地完成的

mypath=os.path.join(dir,subdir,filename) # can have as many arguments as you want!

此外,您可以避免显式的 '..' 和 '.' 在路径名中使用os.pardirand os.curdir。(例如)

file_path =  os.path.join(os.path.dirname(__file__),os.pardir,'data',filename)

这应该会增加代码的可移植性(即使您不打算在其他任何地方运行此脚本,也是一个养成的好习惯)。

于 2012-06-08T18:09:15.107 回答
1

这取决于您如何启动脚本,例如:

如果/bin/script.py包含:

import os
print os.path.dirname(__file__)   #no reason to use os.path.join()

然后:

$> python /bin/script.py
/bin
$> cd /bin
$> python script.py
                       #nothing
$>

使用以下内容是一个更好的主意:

file_path = os.path.abspath(__file__)

然后做任何你想做的事。

于 2012-06-08T17:59:12.013 回答