忘れないうちに備忘録。
環境は、
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日追記終了)