1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Pythonのos.path()によるパス操作

Posted at

はじめに

Pythonの標準ライブラリのosについて、実務でよく使う割になかなか覚えられないos.path()によるパス操作をまとめました。

パス操作

osはパス操作以外にもファイル名の変更(os.rename())や削除(os.remove())などもできるが、パス操作はos.path()により行う。

フォルダ構成

python_os_path
├─ src
│  └─ path.py
└─ main.py

以降はmain.pyをエントリーポイントとし、os.getcwd()との挙動の違いを確認する。

main.py
import os
import subprocess

if __name__ == "__main__":
    # NOTE: Windowsではパス区切りが \ となり問題となる可能性があるためjoinを使う
    # path = f"{os.path.dirname(__file__)}/src/path.py"
    path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "src", "path.py")
    subprocess.run(["python", path])
ターミナル
python main.py

取得

スクリプト自身の絶対パスを取得

path.py
# NOTE: __file__は絶対パスと相対パスになり得るためabspathで絶対パスに統一して使用するのがコツ
abs_path = os.path.abspath(__file__)
print(abs_path) # /Users/~/python_os_path/src/path.py

指定パス(abs_path)からディレクトリ名を取得

path.py
dir = os.path.dirname(abs_path)
print(dir) # /Users/~/python_os_path/src

指定パスからファイル名を取得

path.py
file = os.path.basename(abs_path)
print(file) # path.py

実行場所のパスを取得

path.py
exe_path = os.getcwd()
print(exe_path) # /Users/~/python_os_path

分割

指定パスからディレクトリ名とファイル名を分割

path.py
dir, file = os.path.split(abs_path)
print(dir) # /Users/~/python_os_path/src
print(file) # path.py

指定パスからファイル名と拡張子を分割

path.py
file, ext = os.path.splitext(abs_path)
print(file) # /Users/~/python_os_path/src/path
print(ext) # .py

結合

path.py
joined_path = os.path.join(dir, "path.py")
print(joined_path) # /Users/~/python_os_path/src/path.py

存在確認

path.py
is_path = os.path.exists(joined_path)
print(is_path) # True

おわりに

標準ライブラリのpathlibでも同じようなことができて使っているケースも多いので、使うようになったらpathlibもまとめようと思います。

参考文献

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?