os.path.join(os.path.dirname(__ file __))什么都不返回

时间:2012-06-08 17:38:38

标签: python

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

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

基本上,可执行脚本在bin中,它调用lib中的文件..但是lib必须与数据中的文本文件进行通信

通常这种用法起作用: 要读取文件通常我用来做这个

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?

我做错了什么.. 感谢

3 个答案:

答案 0 :(得分:3)

我猜没有你的意思是一个空字符串?如果__file__首先是空字符串,则情况可能就是这种情况。您是否意外覆盖了__file__

答案 1 :(得分:3)

除了其他评论之外的另一条评论...... os.path.join的要点是避免像

这样的事情
mypath=dir + '/' + subdir + '/'+filename

使用

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

另外,你可以避免明确的'..'和'。'在路径名称中使用os.pardiros.curdir。 (例如)

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

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

答案 2 :(得分: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__)

然后随便做任何你想做的事。