91663


ディレクトリを移動してcsvデータを保存するという作業を行うために、ipynbファイルでいろいろ試行錯誤しておりました。  
ipynbで問題なく動くことが確認できたため、pyファイルにコードをフルコピーして実行したところディレクトリが見つからないというエラーがでました。  
そこで、ipynbとpyのカレントディレクトリを確認（sample.ipynb, sample.py）すると1階層ずれていることがわかりました。

ディレクトリ確認のために実行したコードは以下のコードです。

[code]

    import os
    print(os.getcwd())
    os.chdir('../')
    print(os.getcwd())
    
[/code]

実行結果は、このようになりました。

### sample.ipynb

[code]

    d:\Data\XXX\Python
    d:\Data\XXX
    
[/code]

### sample.py

[code]

    D:\Data\XXX
    D:\Data
    
[/code]

たしかにずれているのですが、両ファイルのディレクトリは同じ階層に存在します（以下参考）。

[code]

    D:
    └─Data
       └─XXX
          └─Python
             ├─sample.ipynb
             └─sample.py
    
[/code]

実行に関しては、移動の際、".."を"."に変えるだけで動くので問題ないのですが、同じ階層にあるにもかかわらずディレクトリがずれることが気になって仕方ありません。  
なぜ、このようなことになるのでしょうか。

追記  
どちらもVSCodeでおこないました。  
.pyファイルは、VSCodeでデバッグ開始をクリックしました。

settings.jsonは以下となっております。

### settings.json

[code]

    {
        "workbench.colorTheme": "Default Dark+",
        "python.linting.flake8Enabled": true,
        "editor.formatOnSave": true,
        "workbench.iconTheme": "material-icon-theme",
        "launch": {
        
            "configurations": [],
            "compounds": []
        }
    }
    
[/code]


CC BY-SA 4.0
2022-10-18T09:46:29.243
91661
2022-10-18T12:07:13.040
2022-10-18T11:33:00.960
54778
54778
question
python
.pyファイルと.ipynbファイルでカレントディレクトリがずれるのはなぜ？


`.ipynb` (Jupyter Notebook, JupyterLab) の場合  
Notebookの位置するディレクトリではなく  
Jupyterを起動したディレクトリ (Jupyter Kernelのディレクトリ)がカレントディレクトリです  
(以下の場合, jupyter labを起動した位置になる)

[code]

    $ cd /home/USER/lang/Python
    $ jupyter lab
    
[/code]

`.py`の場合もそれは同様  
(以下の場合 `Python/sample.py`を実行してても, `getcwd()`は Python実行した位置)

[code]

    ─home
       └─USER
          └─lang
             └─Python
                └─sample.py
    
    $ cd /home/USER/lang/
    
    $ python Python/sample.py
    /home/USER/lang
    /home/USER
    
[/code]

* * *

#### 追記

VS Codeでの `.ipynb` は, (そのプロジェクト) ワークスペース の位置のはず


CC BY-SA 4.0
2022-10-18T11:03:29.210
91663
2022-10-18T12:07:13.040
2022-10-18T12:07:13.040
43025
43025
91661
answer


`os.getcwd()` が返す結果はあくまで **作業ディレクトリ** であり、必ずしも実行したプログラムの保存場所とは限りません。

.py ファイル等と同じディレクトリにいる状態で実行すれば同じ結果になるでしょうが、実行の仕方次第で結果は変わってきます。


CC BY-SA 4.0
2022-10-18T11:38:46.197
91665
2022-10-18T11:38:46.197
3060
91661
answer