LoginSignup
20
22

More than 3 years have passed since last update.

~~絶対~~パスの取得「__file__」

Last updated at Posted at 2017-11-19

忘れないうちに備忘録。

環境は、
Windows10
bash on ubuntu on windows(gensim Doc2Vecで日本語処理したいため)
python3、

絶対パスの取得にあたり、(__file__)の部分で次のようなエラーがでてしまいます。


NameError                                 Traceback (most recent call last)
<ipython-input-6-841aa8654707> in <module>()
     17 
---> 18 current_dir = path.dirname(__file__)
     19 

NameError: name '__file__' is not defined

どうして使えないのかは、よく理解できませんでした。
わかる方いらっしゃったら、教えていただければ、うれしいです。

とりあえず調べに調べ、つぎのような感じで絶対パスが取得できることはわかりました。


import os
current_dir = os.path.dirname(os.path.abspath(sys.argv[0]))
print(current_dir)

(2017年11月20日追記開始)
7 of 9さんのアドバイスをもとに、試してみたところ、パスの取得に成功しました。
ありがとうございました。( )

頂いたアドバイスの内容と、その他に試してみた結果出力を張り付けておきます。


import os
current_dir1 = os.path.dirname(os.path.abspath("__file__"))

current_dir2 = os.path.dirname(os.path.abspath('__file__'))

current_dir3 = os.path.dirname(os.path.abspath(sys.argv[0]))

print(current_dir1)
print(current_dir2)
print(current_dir3)
/home/ユーザ名
/home/ユーザ名
/home/ユーザ名/.pyenv/versions/anaconda3-5.0.1/lib/python3.6/site-packages

(2017年11月20日追記終了)

(2020年10月16日追記開始)
例えば、書き換え例

●エラーが出てしまうパターン

from os.path import dirname, join, normpath
BASE_DIR = normpath(dirname(__file__))
csv_path = join(BASE_DIR, './training_data.csv')

↓↓↓↓↓↓

●エラーがでないように書き換えると

from pathlib import Path
BASE_DIR = normpath(Path().resolve())
csv_path = join(BASE_DIR, './training_data.csv')

(2020年10月16日追記終了)

20
22
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
22