Pythonのパスの結合について-忘れないためのメモ
Pythonのパスの結合で何回でもやりそうな失敗したからメモ
Pythonには標準ライブラリの os ライブラリに環境に合わせていい感じにパスを繋げてくれるモジュールがある
具体的には
import os os.path.join('User', 'desktop')
なんかにすると /User/desktop みたいにして返してくれる。(記事内のディレクトリ名は適当です。)
os.path.dirname(os.path.abspath('__file__'))
こうすると得られる
今回はファイルの保存先をconfigファイルとしてメインの実行ファイルとは別のファイルで管理しようとした。
ファイルの保存先を実行ディレクトリと同じ階層に保存ディレクトリを作って、その中に入れるつもりだったのだが
# 完成予想図 |--main.py | |--hozon1 | |-- a.txt | |-- b.txt | |--hozon2 |--1.csv |--2.csv
最初は上のようになることを期待して書いたコードがこんな感じ
import os MAIN_DIR = os.path.dirname(os.path.abspath('__file__')) TXT_DIR = os.path.join(MAIN_DIR, '/hozon1') CSV_DIR = os.path.join(MAIN_DIR, '/hozon2')
こんなコードを書いたのだけど、こんなコードでは予想したとおりにパスを取得できない それぞれprint文で簡単に確認してみると
MAIN_DIR では /User/desktop
TXT_DIR では /hozon1
CSV_DIR では /hozon2
が出力されてしまった。 全然結合がされていなかった。
では正しくはどうすべきだったのかと言うと
import os MAIN_DIR = os.path.dirname(os.path.abspath('__file__')) TXT_DIR = os.path.join(MAIN_DIR, 'hozon1') CSV_DIR = os.path.join(MAIN_DIR, 'hozon2')
バックスラッシュを取ればよかっただけ。
たったこのためだけに30分も使ってしまった。 しょうもないミスをしたらまた公開しようと思う。