Python におけるパスと URL の取り扱い
Python でパスや URL 操作を行う際の覚え書き.
ローカルファイルの取り扱い
os
モジュールを用いる
ディレクトリ名とファイル名からパスを作成
import os root_name = "/root/" dir_name = "example" file_name = "test.txt" path1 = os.path.join(dir_name, file_name) path2 = os.path.join(root_name, dir_name, file_name)
- 引数は一度に複数のパスを渡すことが可能
- スラッシュの有無などを気にせずに結合できるため, 基本的にはこれを用いると良い
パスの存在確認
- ディレクトリ・ファイルにかかわらず存在を確認する
os.path.exists($PATH)
- ディレクトリの確認
os.path.isdir($DIR)
- ファイルの確認
os.path.isfile()
リモートファイル (URL 等) の取り扱い
- 標準ライブラリの
urllib
を用いる
url の結合
urllib.parse.urljoin
を使用
from urllib import parse base_url = "https://example.com/" endpoint = "/test/flag.txt" parse.urljoin(base_url, endpoint)
url の解析
urllib.parse.urlparse
を用いる
from urllib import parse parsed_url = parse.urlparse($URL)
- スキーム, ネットワーク上の位置, パス, パラメータ等を調べることができる
parsed = parse.urlparse("https://example.com:80/test?name=labu") print(parsed.scheme) # https print(parsed.netloc) # example.com:80 print(parsed.path) # /test print(parsed.query) # name=labu
params
はマトリクスパラメータ (https://example.com;name=abc など) を表す- 一般的な URL パラメータの取得は
query
を使用 netloc
はポート番号を含めた位置を示すため, ドメインを抽出したい場合は以下を使用
domain = parsed.netloc.split(":")[0] print(domain) # example.com