1

I have a directory structure like this:

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

So basically, the executable script is in bin and it calls the files in lib.. but lib has to communicate with the text files in data

Usually this use to work: TO read a file in usually i use to do this

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

But, in this instance, if i do:

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

What am i doing wrong.. Thanks

4

3 に答える 3

4

空の文字列を意味するものは何もないと思いますか?__file__これは、そもそも空の文字列である場合にのみ当てはまります。誤って上書きしました__file__か?

于 2012-06-08T17:41:21.000 に答える
3

他のコメントに加えてもう1つのコメント...のポイント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)

これにより、コードの移植性が向上します (このスクリプトを他の場所で実行する予定がない場合でも、習慣にするのは良い習慣です)。

于 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 に答える