Path.resolve() に存在しないファイル指定時の Windows と Linux での挙動の違い

2 min

Chromebook の Linux 開発環境では Python の開発が出来ます。Python でカレントディレクトリ配下のファイルの絶対パスを取得際は pathlib.Path の resolve() を使用すると思いますが、存在しないファイルを指定すると Windows と Linux系OS で挙動が異なるので注意が必要です。

広告_零号機

Path.resolve() の挙動の違い

Path.resolve() について

詳しくはマニュアルを参照ください。

パスを絶対パスにし、あらゆるシンボリックリンクを解決します。新しいパスオブジェクトが返されます

マニュアル

Path.resolve() を使用すると絶対パスを取得することが出来ます。

import pathlib
import os

# /home/kewton/work/pathlib/test.txt
print(pathlib.Path("./test.txt").resolve())

Windows と Linux系OSでの挙動の違い

Windows と Linux系OS での挙動の違いをまとめると以下のようになります。

存在しないファイル名を指定時 Windows ではファイル名のみが返却されますが、Linux系OSではあたかもカレントディレクトリに指定したファイルが存在している場合の絶対パスが返却されることが解ります。

ファイルの存在有無windows
での実行結果
Linux系OS
での実行結果
存在する絶対パスが返却絶対パスが返却
存在しないファイル名が返却カレントディレクトリに指定した
ファイルが存在している場合の絶対パスが返却
Path.resolve() のOSによる挙動の違い

動作確認に使用したコード

下記コードを Windows マシンと Linux系OSのマシン(Chromebookを使用)で動作させて確認しました。

import pathlib
import os

if __name__ == "__main__":
    print(os.listdir(os.getcwd()))
    print(pathlib.Path("./test.py").resolve())
    print(pathlib.Path("./test.txt").resolve())
windows 10 で実行時
ChromebookのLinux開発環境(debian)で実行時

まとめ

本記事では、 Path.resovle() の OSによる挙動の違いを説明しました。ご参考になりましたら twitter をフォローして SNS でシェアして頂ければ幸いです。

ご参考

ちなみに今回は、 Linux系OSの動作確認環境として下記 Chromebook を使用しました。
14.0型フルHD × Core i3 × メモリ8GB を満たす数少ない端末です。
軽くて持ち運びしやすく開発に耐えうるスペックなのでおすすめです。

富士通|FUJITSU ノートパソコン FMV Chromebook 14F(タッチパネル) ダーククロム FCB143FB [14.0型 /Chrome OS /intel Core i3 /メモリ:8GB /SSD:128GB /タッチパネル対応 /2021年12月モデル]【point_rb】

価格:70,510円
(2022/2/23 18:35時点)
感想(1件)

IT・プログラミングに関する相談・依頼はこちら
広告_零号機-エリア2
kewton

kewton

大学院卒業後、某大手SIerで10年以上SEとして従事。
社会人3年目までに基本情報・応用情報技術者、データベーススペシャリスト、簿記3級・2級を取得。
基幹系システム・IoTシステム開発のプロジェクト経験多数。AI活用システムの企画・プロト開発経験あり。
強みは、プロマネだけでなく自身で開発も実施してきたこと。
【扱える言語】
C#、java、python、javascript、Excel VBA
【扱えるDB】
oracle、sql server、postgreSQL、mongoDB

FOLLOW

カテゴリー:
関連記事

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA