Tetsu27
@Tetsu27

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

pythonにて相対パスで保存できなくなった。

Q&A

Closed

解決したいこと

numpyのndarrayを相対パスで保存できないです。
ディレクトリの構造は
D:
├─code
│ ├─test.py
├─npy
となっており、test.pyの中で作成したtempというndarrayをtemp.npyという名前でnpyディレクトリに保存する下のようなコードを書きました。

np.save("../npy/temp.npy", temp)

エラーは吐かれないのですが、保存はされません。

試しに以下のコードでカレントディレクトリを出力するとtest.pyとは全く異なる場所にワーキングディレクトリがあることになってしまっています。

import os

path = os.getcwd()
print(path)

ワーキングディレクトリをtemp.pyのところに合わせれば保存できそうな気もしますが、頻繁にディレクトリを変えるので、相対パスでどうしても保存したいです。

自分で試したこと

現在はフルパスで指定することで対処していますが、どなたか解決策ご存じないでしょうか。
お教えいただきたいです。宜しくお願い致します。

1

2Answer

test.pyとは全く異なる場所にワーキングディレクトリがあることになってしまっています。

ワーキングディレクトリの初期値は python コマンドを実行したディレクトリになります。 test.py の場所になるとは限りません。

相対パスでどうしても保存したいです。

ワーキングディレクトリを変えるのではなく、 test.py があるディレクトリのパスを取得するといいでしょう。以下のようにディレクトリのパスに相対パスを連結すれば望みの場所に保存できます。

script_dir = os.path.dirname(os.path.realpath(__file__))
output_path = os.path.join(script_dir, "../npy/temp.npy")
np.save(output_path, temp)
2Like

Comments

  1. @Tetsu27

    Questioner

    ワーキングディレクトリの初期値は python コマンドを実行したディレクトリになる旨、お教えくださいまして誠にありがとうございます。非常に勉強になりました。
    また解決方法のコードご提供いただきまして、本当にありがとうございます。
    フルパスをいちいちコピペしており、非常にストレスでしたので、自動的にフルパス参照できるコードいただきまして本当に助かりました。
    ありがとうございました。

下記URLを参考に、「D:\CODE」までPythonでディレクトリ移動すると、意図した相対パスになると思いますが、いかがでしょうか?

1Like

Comments

  1. @Tetsu27

    Questioner

    コメントいただき誠にありがとうございます。
    貴殿とuasi様のコメントで無事解決致しました。
    本当に助かりました。ありがとうございます。

Your answer might help someone💌