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での動作が若干気になるけど、いつか動作確認してみようかなってことで。