2010-11-28 29 views
6

こんにちは スラッシュを後方に変換する関連記事を読んでいます。 しかしゾルは、生の文字列を使用することでした。私の場合は逆スラッシュをスラッシュに変換する

しかし、問題は次のとおりです。

私は変数 VAR =に動的にファイルパスを取得します「C:\ dummy_folder \ A.TXT」私はスラッシュをするためにそれを変換する必要があり、この場合には 。 '\ a'のためにスラッシュに変換できません

どのように変換しますか?または、この文字列を生の文字列に変更してスラッシュに変更できるようにするには

+1

「動的に」この文字列はどこから来ますか?主な場所のバックスラッシュはPythonプログラムの中で特別な意味を持ちます。Pythonのソースコード文字列リテラルには静的でなければなりません。 –

+0

**なぜあなたは**それらを変換しますか? – martineau

+0

Windowsでは、Pythonは 'C:\ path \ to \ file.txt'を出力します。しかし、私はgit bashで '/ c/path/to/file.txt'のコマンドを実行したいと考えています。 –

答えて

12

これを行わないでください。ただos.pathを使用して、すべてを処理させてください。前方スラッシュまたはバックスラッシュを明示的に設定すべきではありません。

​​

しかし、やはりそうしないでください。 os.pathを使って幸せになれ!文字列リテラルで

+0

ansのためにありがとうございますが、私はos.pathを試しましたが、スラッシュ'、\ n'はos.pathに – abhishek

+0

+1を変換する前に処理されます。 – knutin

+0

Abhishek、上記の方法で置き換えることはできますが、そうしないでください。 – user225312

0
>>> 'C:\\dummy_folder\\a.txt'.replace('\\', '/') 
'C:/dummy_folder/a.txt' 

、あなたは\文字をエスケープする必要があります。

+0

ゾルありがとう、どのように2つのバックスラッシュに単一のバックスラッシュを変更しましたか? – abhishek

+1

2つのバックスラッシュでそのようにコード化する必要があります。バックスラッシュは特殊文字であり、文字列リテラルで真のバックスラッシュを1つ取得するには、2を入力する必要があります。 – marcog

1

生の文字列は、文字列リテラル用です(ソースファイルに直接書き込まれます)。ここではそうではありません。いずれにしても、スラッシュは特殊文字ではなく、問題なく通常の文字列に埋め込むことができます。これは通常、文字列内で他の意味を持つバックスラッシュであり、リテラルのバックスラッシュとして解釈されるように "エスケープ"する必要があります。前方にバックスラッシュを置き換えるために

はスラッシュ:単なる文字列としてパスを取り扱い

# Python: 
string = r'C:\dummy_folder\a.txt' 
string = string.replace('\\', '/') 

# Ruby: 
string = 'C:\\dummy_folder\\a.txt' 
string = string.gsub('\\', '/') 
2

はトラブルにあなたを置くことができ;あなたが扱っているパスがユーザの入力であるか、あるいは予測できない方法で変化するかもしれません。

異なるOSは、与えられたファイルのパスを表現する方法が異なります。すべての最新のプログラミング言語には、パスとファイルシステム参照を処理する独自のメソッドがあります。確かにPythonとRubyのそれを持っている:

あなたが本当に文字列を処理する必要がある場合:

  • のPython:string.replace
  • Ruby:string.gsub
11

os.path.normpath()もあり、ローカルOSによってバックスラッシュとスラッシュを変換します。詳細な使用方法についてはhereをご覧ください。

>>> string = r'C:/dummy_folder/a.txt' 
>>> os.path.normpath(string) 
'C:\dummy_folder\a.txt' 
+0

normpathを指摘していただきありがとうございますが、それは一方向にしか動作しません:スラッシュをバックスラッシュに変換してください。それ以外の方法では動作しません(バックスラッシュをスラッシュにする)。私は最良の方法は、Linuxのパスを仮定し、すべてのパス文字列がスラッシュを使用することを確認することですね。次に、文字列が使用される直前にnormpath()を呼び出します。 – hopia

+0

これは私にとって最善の答えです。 Mac OS Xでは、 'os.path.normpath'は期待どおりスラッシュを保持します。 Windowsでは、スラッシュはバックスラッシュに変換されます。 – fatuhoku

関連する問題