俺のブログ

学習メモや日記をつらつらと書きます。

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分も使ってしまった。 しょうもないミスをしたらまた公開しようと思う。