我有一个像这样的目录结构:
--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?
我做错了什么.. 感谢
答案 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.pardir
和os.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__)
然后随便做任何你想做的事。