PythonにおけるWindows標準表記パスの取り扱い

数時間試行錯誤してやっとできたけど、これ正解だろうか・・・。

追記:だめでした・・・\fが意図どおりに解釈されない・・・

 

設定ファイルに標準的な記法でかいたWindowsパスを、pythonで正確に取り扱う。

 

例)

C:\temp\sample\test.txt

というファイルを、「外部のコンフィグファイルで(=configparserで)」読み込んで処理に利用したい場合

configparserは一切の類推を行わない(のが基本の)ようで、普通に文字列を変数にセットした場合と同じなので、

 

>> path = "C:\temp\sample\test.txt"

>>> print(path)
C:     emp\sample    est.txt

 

当然こんな感じになります(\tをタブ文字と解釈)

ので、まずはこの\tをエスケープシーケンスではない状態にしなければいけない。

これを実現するのがrepr()(※存在意義はわかるが、今のところまったく使いこなせていない関数・・・)

 

>> print(repr(path))

'C:\temp\\sample\test.txt'

 

これは原形はどうなっているかというと

 

>>> repr(path)
"'C:\\temp\\\\sample\\test.txt'"

 

なるほど。

この状態でファイル開けるかというと、

 

>>> os.path.exists(path)
False
>>> os.path.exists(repr(path))
False

 

だめだった。

エスケープシーケンスはOKぽいので、あとはシングルクォーテーションを削除する。

 

>>> os.path.exists(repr(path).replace("'", ""))
True

 

できた。

これは"/"区切り表現だと、

>>> path = "C:/temp/sample/test.txt"
>>> os.path.exists(repr(path).replace("'", ""))
True
>>> print(repr(path).replace("'", ""))
C:/temp/sample/test.txt

 

また"\\"の場合は、

>>> path = "C:\\temp\\sample\\test.txt"
>>> os.path.exists(repr(path).replace("'", ""))
True
>>> print(repr(path).replace("'", ""))
C:\\temp\\sample\\test.txt

 

とりあえずOKになりました。

あとはUNIX(POSIX)、Macでの動作が若干気になるけど、いつか動作確認してみようかなってことで。