2017-11-24 2 views
3

ファイルがここに存在して、100%:ファイル名に一重引用符/アポストロフィが含まれていると、パスに失敗するのはなぜですか?

path = "~/Music/Youtube_dl/Some Artist - 'On + Off'.m4a" 
assert os.path.exists(path) 

しかし、上記は常に失敗します。

私はtest_file.m4aに私の実際のファイル名を変更して行う場合は、次の

path = "~/Music/Youtube_dl/test_file.m4a" 
assert os.path.exists(path) 

すべてが正常に動作します。

したがって、ファイル名に100%の問題があります。しかし、私はそれを解決するために見ることができません。私は文字列の前にuを前もって試してみました。

注:外部ソースからファイル名を取得しているため、一部のファイルに一重引用符/引用符が含まれているという事実を制御することはできません。

+1

あなたは、端末からの非常に正確なファイル名をコピーしようとしたことがあり、それがエクスポートされると仮定すると、私たちは、環境変数HOMEを使用することができますか?アポストロフィはあなたに見えるもの以外のものかもしれません。 –

答えて

2

~はシェル構造であり、pythonはそれについて何も知らない。さえos.path.exists('~')が失敗します。あなたは(合理的にポータブルである)os.path.expanduserを使用することができ

import os 
import os.path 
path = "~/Music/Youtube_dl/Some Artist - 'On + Off'.m4a" 

path = path.replace('~', os.environ['HOME']) 
assert os.path.exists(path) 

オルタナティブ:

import os.path 
path = "~/Music/Youtube_dl/Some Artist - 'On + Off'.m4a" 

path = os.path.expanduser(path) 
assert os.path.exists(path) 
+1

これはうまくいきましたので、正解として選択することにします。変わったことは ''〜/ Music/Youtube_dl/test_file.m4a "は私が使っているライブラリの' mutagen'で動作するということです。しかし、上記はそうではありませんでした。 'expanduser'が本当に助けになりました。しかし、これは非常に奇妙です。 – zerohedge

+0

@zerohedge:私も困惑していますが、先頭の '〜'はPythonに特殊文字として解釈されません。たぶん、先頭に '〜'を付けてファイル名を作成することができましたか?それは法的なファイル名文字ですが、それを使うのは馬鹿です。 – cdarke

+0

あなたの言うことが真実であることを確認しました。これは今私にとって叙事詩的に混乱しています。 Pythonスクリプトで '〜'を使うのはどういう意味ですか? – zerohedge

関連する問題